我一直在搞清楚为什么我会收到这个错误。以下是代码段:
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;
被认为是空指针解除引用错误,但为什么不是第二个?我注意到,如果我也将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
对于后台,此代码应该从输入文件中读取并使用双向链表创建二叉树。如果我读到&#34;删除&#34;这个词,我需要搜索列表并删除项目(如果它存在),如果它没有那么我需要创建节点。我无法理解的是为什么cout&lt;&lt; root&lt;&lt; endl给了我两个不同的地址?
如果您需要更多信息,我很乐意提供。
编辑:我首先,我认为这是一个NULL指针引用错误,导致我为node *root
获取两个不同的地址位置的问题,但实际上我将数组大小设置为6而不是7导致溢出意外地改变地址位置。谢谢你的帮助!
我仍然是stackoverflow的新手,所以我不确定如何将其标记为已解决...
答案 0 :(得分:2)
由于最初你有node *root = NULL;
并且没有为它分配任何东西,它将是空指针解除引用。请注意,您实际上可以打印root本身,无论如何都应该为您提供有效的内存地址。
我也不确定第二个&#34;你的意思。请澄清。
此外,您的商品数组的大小必须为7而不是6,因为&#39; \ 0&#39;终止性格。