以下代码中,关于c++二叉树类中maketree函数存在什么问题,该怎么改?

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()会出错

慕田峪7331174
浏览 190回答 1
1回答

德玛西亚99

le是指针,root->le=lr.root;表示le指向root的空间,而lr,rr都说是临时变量,在函数返回结束后就会回收释放。这时候lr的值当然不是NULL(因为lr物理地址还是存在的嘛),但是你去释放就有问题了,因为这块空间已经不属于le了,当然delete就会出错了。。你最好把lr改成指针或者引用(推荐指针)。当然,rr同理啦。
打开App,查看更多内容
随时随地看视频慕课网APP