【问题标题】:Valgrind "Conditional jump or move depends on uninitialised value(s)" ErrorValgrind“条件跳转或移动取决于未初始化的值”错误
【发布时间】:2023-12-02 22:37:02
【问题描述】:

我在 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 是一个双向链表结构。代码 ~works~ 但这个错误令人担忧。代码中是否还有其他东西会踩到内存,或者上述函数在某些方面存在缺陷?

【问题讨论】:

  • 所有next指针都初始化了吗?
  • 你知道你会认为这将是我要看的第一件事......不,虽然我在添加/删除/追加逻辑中很小心,但初始化函数没有设置下一个/上一个为NULL ...问题解决了。谢谢!
  • 有时在有效代码中也会发生这种情况。

标签: c linked-list valgrind


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    在优化关闭的情况下编译 (-O0)。使用 --track-origins=yes 运行 valgrind 以确定错误的来源。请参阅here 了解更多信息。

    【讨论】:

      最近更新 更多