template<class T>class bit{private:struct node{node *le;node *ri;T data;};node *root;void clear(node*t){if(t->le!=NULL)clear(t->le);if(t->ri!=NULL)clear(t->ri);delete t;}public:bit(){root=new node;root->le=NULL;root->ri=NULL;}bit(T x){root=new node;root->data=x;root->le=NULL;root->ri=NULL;}void clear(){if(root!=NULL)clear(root);root=NULL;}void maketree(T x,bit lr,bit rr){root=new node;root->data=x;root->le=lr.root;root->ri=rr.root;lr.root=NULL;rr.root=NULL;}}执行maketree后再执行清空clear()会出错
1 回答

德玛西亚99
TA贡献1770条经验 获得超3个赞
le是指针,root->le=lr.root;表示le指向root的空间,而lr,rr都说是临时变量,在函数返回结束后就会回收释放。这时候lr的值当然不是NULL(因为lr物理地址还是存在的嘛),但是你去释放就有问题了,因为这块空间已经不属于le了,当然delete就会出错了。。你最好把lr改成指针或者引用(推荐指针)。当然,rr同理啦。
- 1 回答
- 0 关注
- 189 浏览
添加回答
举报
0/150
提交
取消