【发布时间】:2016-01-16 01:35:22
【问题描述】:
我是 C++ 和一般指针的新手,但我似乎无法解释为什么我的两个几乎相同的代码之一会出现分段错误。我正在做一个简单的遍历LinkedList 的任务,这是我的第一种方法:
Node * curNode = head; //Head is the pointer to the head of the LinkedList
while(curNode) {
curNode = curNode->next;
}
这会产生所需的结果并成功遍历整个 LinkedList。但是,这会引发Segmentation fault 错误:
Node * curNode = head;
while(curNode->next != NULL) {
curNode = curNode->next;
}
将条件更改为强制转换的布尔值或!= nullptr 不会执行任何操作,因此条件不会在空指针上引发true。然而,我似乎无法弄清楚为什么我得到Segmentation fault,似乎适当的循环条件确保我不会访问任何空指针。
【问题讨论】:
-
如果
head是一个空指针,第二个代码 sn-p 会引入未定义的行为。 -
你能把整个代码贴出来吗……因为我觉得这很好
-
我在一个 head 不是
null指针的测试用例上运行了这个 -
如果
head是NULL,第二个版本显然会失败。在这种情况下,循环将在第一次迭代的顶部导致分段错误,因为它会尝试取消引用NULL(具有较小的偏移量)。 -
感谢大家的回答。我意识到出了什么问题,该站点在后台运行了三个测试用例,但只显示了这三个测试用例之一的
std:input。分段错误确实来自一个隐藏的测试用例,其中输入为NULL..... 抱歉
标签: c++ pointers linked-list