我试图消除我正在创建的二进制搜索树中的任何内存泄漏,因此我创建了一个简单的递归删除方法。这是首先导致的方法
void BST::copy(const BST& other){
if (other.root != NULL){
Clear();
Clear();
将首先调用 recursiveDelete(root);
void BST::recursiveDelete(BSTNode * head){
if (head == NULL)
return;
recursiveDelete(head->left);
recursiveDelete(head->right);
delete head;
}
这段代码会出现段错误,我不知道为什么。当它调用复制方法时,它只有一个节点,因此它说 head 不是预期的 NULL,但由于某种原因,当它尝试引用 head->left
时会出现段错误。
如有任何帮助,我们将不胜感激。 :)
编辑: 直到一位回答者指出,我才知道这一点,但是在复制构造函数中,需要先将所有内容初始化为 NULL,然后再尝试复制。因此,当我将构造函数更改为以下内容时,我的问题得到了解决(大部分)
BST::BST(const BST & other) : root(NULL), size(0){
最佳答案
第一条评论:如果另一个对象是否有数据,您可能应该清除拷贝中对象的数据。如果另一个对象为空,则拷贝也应使该对象为空。
第二条评论:我无法从你的问题中分辨出来,但我预计 head->left 或 head->right 在构造期间没有正确设置为 NULL。无效但不为 NULL 的值可以解释如何通过 if (head == NULL)
检查。
关于清除二叉搜索树时的 C++ 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7669500/