【发布时间】:2011-10-06 01:27:02
【问题描述】:
我正在尝试消除我正在制作的二进制搜索树中的任何内存泄漏,因此我制作了一个简单的递归删除方法。这是首先导致的方法
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;
}
这段代码会出现段错误,我不知道为什么。当它调用 copy 方法时,它只有一个节点,所以它说 head 不像预期的那样为 NULL,但由于某种原因,当它试图引用 head->left 时,它会出现段错误。
任何帮助将不胜感激。 :)
编辑:直到其中一位回答的人指出,我才知道这一点,但在复制构造函数中,需要先将所有内容初始化为 NULL,然后再尝试复制。所以当我将构造函数更改为以下时,我的问题(大部分)得到了解决
BST::BST(const BST & other) : root(NULL), size(0){
【问题讨论】:
-
这个有问题的
head是在哪里创建的?