【问题标题】:Delete a node from a binary tree avoiding memory leaks从二叉树中删除节点避免内存泄漏
【发布时间】:2014-06-24 07:04:59
【问题描述】:

我想从二叉树中删除一个给定的节点指针,但我也想用他的一个孩子的指针来改变它(比如说左边的那个)。

如果我这样做:

Node<T> *tmp = root->getLeftNode();
delete root;
root = tmp;

指针根最终没有左孩子的值。

如果我这样做:

root = root->getLeftNode();

它有效,但这是一个明显的内存泄漏。

如何正确删除根目录?

编辑:我使用内存泄漏方法尝试了我的 removeNode 方法,它有效(我的代码在逻辑上似乎是正确的)。只是当我以这种方式使用删除时,根指针最终会有一个很大的负数(这不是一个有效的地址)。

【问题讨论】:

  • “指针根最终没有左孩子的值”是什么意思。 ?那么它的价值是什么?因为作业很清楚,所以这里没看出问题……
  • 根指针的值最终有一个很大的负数。类似-123483978349。
  • 但是如果它是指向structclass的指针,这可能只是指针值,你必须打印root指向的struct的内容而不是root本身。请发布您的Node&lt;T&gt; 数据结构。
  • 确保不要在 Node&lt;T&gt; 析构函数中使用 delete 左右节点字段。
  • 为什么我的问题没有意义?我想知道使用这种模式删除是否是错误的。当我尝试在我的问题中写出所有正确信息时,这些 -1 非常烦人。无论如何,谢谢你Unda。我在析构函数中删除了我的左右节点。

标签: c++ memory-leaks binary-tree delete-operator


【解决方案1】:

您的答案似乎应该是正确的,但是您需要发布更多信息。您是否尝试将左孩子的值存储在 root 中,或者 root 是指向节点的指针?如果您正在尝试获取左孩子的价值,我会使用:

root = *tmp;

【讨论】:

    猜你喜欢
    • 2020-11-15
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 2019-05-04
    相关资源
    最近更新 更多