亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

以下代碼中,關于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 關注
  • 188 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號