gpt4 book ai didi

c++ - 我的析构函数似乎没有命中树中的每个节点,因为我有内存泄漏,我在这里错过了什么?

转载 作者:行者123 更新时间:2023-11-27 23:09:03 25 4
gpt4 key购买 nike

编辑:所以我是个白痴,在使用 valgrind 时忘记通过 SSH 更新我的 .cpp。无论如何,我已经更新了下面的代码以表示新的更改。不幸的是,我仍然对下面的内容有所了解,我正在做的是创建一棵树,这意味着在某处某些信息仍未被正确删除。

这是我的树的析构函数,它调用递归助手。

//---------------------------- destructor --------------------------------
BinTree::~BinTree() {
makeEmptyHelper(root);
}

//---------------------------- makeEmptyHelper --------------------------------
void BinTree::makeEmptyHelper(Node*& current) {

if (current != NULL) {
makeEmptyHelper(current->left);
makeEmptyHelper(current->right);
delete current->data;
delete current;
current = NULL;
//delete current;
}
}

这是我的节点结构:

struct Node {
NodeData* data; // pointer to data object
Node* left; // left subtree pointer
Node* right; // right subtree pointer
};

NodeData 是一个单独的对象类,它有自己的正常工作的析构函数。

最佳答案

您应该在将其设置为 NULL 之前删除 current,而不是之后。事实上,没有理由首先将 current 设置为 NULL:指针 current 是按值传递的,因此更新它有无外部影响。

请注意,delete NULL 是合法的,但它是空操作。

关于c++ - 我的析构函数似乎没有命中树中的每个节点,因为我有内存泄漏,我在这里错过了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21341570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com