【发布时间】:2014-06-24 07:04:59
【问题描述】:
我想从二叉树中删除一个给定的节点指针,但我也想用他的一个孩子的指针来改变它(比如说左边的那个)。
如果我这样做:
Node<T> *tmp = root->getLeftNode();
delete root;
root = tmp;
指针根最终没有左孩子的值。
如果我这样做:
root = root->getLeftNode();
它有效,但这是一个明显的内存泄漏。
如何正确删除根目录?
编辑:我使用内存泄漏方法尝试了我的 removeNode 方法,它有效(我的代码在逻辑上似乎是正确的)。只是当我以这种方式使用删除时,根指针最终会有一个很大的负数(这不是一个有效的地址)。
【问题讨论】:
-
“指针根最终没有左孩子的值”是什么意思。 ?那么它的价值是什么?因为作业很清楚,所以这里没看出问题……
-
根指针的值最终有一个很大的负数。类似-123483978349。
-
但是如果它是指向
struct或class的指针,这可能只是指针值,你必须打印root指向的struct的内容而不是root本身。请发布您的Node<T>数据结构。 -
确保不要在
Node<T>析构函数中使用delete左右节点字段。 -
为什么我的问题没有意义?我想知道使用这种模式删除是否是错误的。当我尝试在我的问题中写出所有正确信息时,这些 -1 非常烦人。无论如何,谢谢你Unda。我在析构函数中删除了我的左右节点。
标签: c++ memory-leaks binary-tree delete-operator