c++指针,为什么树的根节点不能删除?

亲情的三分 发布于 2017/12/19 22:07
阅读 218
收藏 0
struct TreeNode {
	int val;
	TreeNode *left;
	TreeNode *right;
	TreeNode(int x) : val(x), left(NULL), right(NULL) {}

};

TreeNode* tree(TreeNode* root) {
	TreeNode *t=nullptr;
	t = root->left;
	delete root;
	return t;
}

auto a = TreeNode(5);
auto b = TreeNode(2);
auto c = TreeNode(6);
a.left =&b;
a.right = &c;
cout << a.val <<" "<<a.left->val<<" "<<a.right->val<< endl;
auto n = tree(&a);

我在这个函数中,想要返回树的子节点,然后释放掉树的根节点,我在操作中,如果释放掉树的子节点都没有问题,但是想要释放根节点就会出现错误。。这是为什么呢?

加载中
1
大止刀口
大止刀口

没见你new却用了delete,没问题才怪。

auto a = TreeNode(5);
auto b = TreeNode(2);
auto c = TreeNode(6);

这几个写在函数体里的话,应该都是在函数调用的栈帧里,不在堆中。不能用delete。

TreeNode *a = new TreeNode(5);//只有new的才用delete。

亲情的三分
亲情的三分
该评论暂时无法显示,详情咨询 QQ 群:点此入群
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部