Valgrind“条件跳转或移动取决于未初始化的值”错误

时间:2010-11-06 16:12:49

标签: c linked-list valgrind

我收到很多错误,valgrind说“条件跳转或移动取决于未初始化的值”。

以下是其中一个块。所有这些都是相似的:

vasm_sourceline_info_t* line = asmState->firstLine;
if (line == NULL) return;
while ((line = line->next) != NULL)
{
   printf ("[%s(%i)] %s\n", line->fileName, line->lineNumber, line->data);
}

错误本身位于while()行。 vasm_sourceline_info是一个双向链表结构。代码〜工作〜但这个错误令人担忧。代码中是否有其他内容在内存中踩踏,或者上述函数是否以某种方式存在缺陷?

2 个答案:

答案 0 :(得分:14)

编译优化OFF(-O0)。使用--track-origins=yes运行valgrind以确定错误的来源。有关详情,请参阅here

答案 1 :(得分:6)

代码本身没有任何问题,但是如果其中一行'next字段尚未初始化(可能是最后一行的next字段),则可以解释该消息。