我收到很多错误,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
是一个双向链表结构。代码〜工作〜但这个错误令人担忧。代码中是否有其他内容在内存中踩踏,或者上述函数是否以某种方式存在缺陷?
答案 0 :(得分:14)
编译优化OFF(-O0
)。使用--track-origins=yes
运行valgrind以确定错误的来源。有关详情,请参阅here。
答案 1 :(得分:6)
代码本身没有任何问题,但是如果其中一行'next
字段尚未初始化(可能是最后一行的next
字段),则可以解释该消息。