我不确定为什么我会收到 NULL 指针取消引用错误
I'm unsure as to why I'm getting a NULL pointer dereference error
我一直在弄清楚为什么我得到这个错误。下面是代码片段:
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。
相关文章:
- C++ 关于指针取消引用的技术问题
- 共享指针取消引用错误
- 为什么我在C++中有一个空指针取消引用
- 对指针取消引用的混淆
- 指针取消引用:无法将“节点**”转换为“节点*”
- 是否有某种功能,指针取消给出了rvalue
- 返回指针取消引用的 c++ 会导致分段错误
- cppcheck null指针取消引用:m_buffer-否则,针对null进行检查是多余的
- Cppcheck可能的空指针取消引用:
- 通过基类指针取消引用
- C++中的安全指针取消引用
- 为什么我的链表"next"指针取消引用错误的内存(XCode,C++)
- 数组访问导致空指针取消引用
- C++控制内存访问和指针取消引用
- C++指针取消引用
- C/C++ 双指针取消引用问题
- 优化器删除指针取消引用行
- C/C++ 指针取消引用的问题
- 在c++中将指针取消引用到引用中
- 指针取消引用