【发布时间】:2020-11-28 22:03:54
【问题描述】:
在我的 C 项目中,我有这段代码(一个简单的链表):
while(current_node->v_uk <= version && current_node != NULL)
current_node = current_node->next;
好吧,这会引发分段错误,但是,如果我将其切换到
while(TRUE){
if(current_node->v_uk <= version && current_node != NULL)
break;
current_node = current_node->next;
}
它按预期工作。我无法弄清楚问题可能是什么
【问题讨论】:
-
为什么要检查
current_node != NULL之后current_node->v_uk? -
两种情况都调用 UB (undefined behavior)。 UB 的许多可能表现之一是“它按预期工作”。
-
这两个代码 sn-ps 没有做同样的事情。第一个在
current_node->v_uk <= version为假时立即结束循环,如果current_node->v_uk <= version始终为真,它将以未定义的行为结束,因为它遵循NULL指针-您需要检查指针是否为NULL在你取消引用它之前。第二个在current_node->v_uk <= version为真时结束循环。
标签: c pointers linked-list segmentation-fault