我不确定为什么我会收到 NULL 指针取消引用错误

I'm unsure as to why I'm getting a NULL pointer dereference error

本文关键字:指针 取消 引用 错误 NULL 不确定 为什么      更新时间:2023-10-16

我一直在弄清楚为什么我得到这个错误。下面是代码片段:

int main() {
node *root = NULL;
char item1[6];
int item2;
in.open("input.txt");
while(in >> item1) {
    if(strcmp(item1, "delete") == 0) {
        in >> item2;
        cout << root->item << endl;
        if(!deleteLeaf(root, item2)) { // if deleteLeaf did not find(false)
        }
    }
    else {
        item2 = atoi(item1);
        Insert(root, item2);
        cout << root->item << endl;
    }
}
return 0;

}

我注意到的是,第一个cout << root->item << endl;被认为是NULL指针解引用错误,但为什么不是第二个?我注意到,如果我也改变cout << root->item << endl;cout << root << endl;,我得到两个不同的地址位置。下面是Insert()的代码:

void Insert(node *&leaf, int item) {
    if(leaf == NULL) {
        leaf = new node;
        leaf->right = NULL;
        leaf->left = NULL;
        leaf->item = item;
    }
    else if(item < leaf->item) {
        Insert(leaf->left, item);
    }
    else {
        Insert(leaf->right, item);
    }
}

输入文件:

1
2
delete 3
4
5
6

在后台,这段代码应该从一个输入文件中读取,并使用双链表创建一个二叉树。如果我读取单词"delete",我需要搜索列表并删除存在的项,如果不存在则需要创建节点。我不明白的是,他为什么不去<<根& lt; & lt;给我两个不同的地址?

如果你需要更多的信息,我很乐意提供。

编辑:我首先,我认为这是一个NULL指针解引用错误,导致我的node *root获得两个不同的地址位置的问题,但实际上,我将我的数组大小设置为6而不是7,导致溢出意外地改变地址位置。谢谢大家的帮助!

我仍然是新的stackoverflow所以我不确定如何标记这个作为解决…

由于最初您有node *root = NULL;并且没有为它分配任何内容,因此它将是空指针解引用。请注意,您实际上可以打印根本身,并且它应该为您提供一个有效的内存地址。

我也不确定你所说的"第二件"是什么意思。请澄清。

此外,您的项目数组的大小必须为7,而不是6,因为''结束字符的+1。