为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++ C
慕田峪7331174 2022-03-18 11:11:07
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同理啦。

查看完整回答
反对 回复 2022-03-23
  • 1 回答
  • 0 关注
  • 189 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号