我做了一个二叉树类,其中包含:int
值,BinaryTree* left
和BinaryTree* right
。
class BinaryTree {
private:
int value;
BinaryTree* left;
BinaryTree* right;
bool isVisited;
public:
BinaryTree();
BinaryTree createComplete(int n);
~BinaryTree();
}
我的析构函数是:
BinaryTree::~BinaryTree() {
delete left;
delete right;
}
当在clion中运行时,它可以完美运行,但是在我的终端机上
一个段错误(核心已转储)。我到处看的人都声称这应该是破坏者。任何详细说明都会有所帮助!
我不是stackoverflow专家,我将〜BinaryTree函数更新为仍然存在segfault:
BinaryTree::~BinaryTree() {
if (right != NULL) {
delete right;
}
if (left != NULL) {
delete left;
}
}
最佳答案
首先,当前的实现不是完整的树。
它是一个节点,因此我建议将其重命名为BinaryTreeNode并使用它来构建新的类BinaryTree,该类可以跟踪根并允许您递归地重新分配树。
话虽如此,您的析构函数很可能发生段错误,因为您盲目地尝试删除指针。
首先,请确保您初始化为nullptr左右。
然后你做if(left != nullptr) { delete left }