2010-11-06 116 views
8

我收到很多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是一個雙向鏈表結構。代碼〜工作〜但這個錯誤令人擔憂。代碼中是否存在其他內容,或者上述函數在某種程度上存在缺陷?

+3

是否都是初始化的下一個指針? – CodesInChaos 2010-11-06 16:14:57

+2

你知道你會認爲這將是我會看到的第一件事...不,雖然我在照顧添加/刪除/附加邏輯,初始化函數並沒有設置next/prev爲NULL ...問題解決。謝謝! – 2010-11-06 16:18:26

+0

它有時候會在有效的代碼中發生。 – 2010-11-06 16:25:50

回答

6

代碼本身沒有任何問題,但是如果其中一行'next「字段尚未初始化(推測是最後一行的next字段),那就可以解釋該消息。

14

編譯優化OFF(-O0)。用--track-origins=yes運行valgrind來確定錯誤的來源。有關更多信息,請參見here

相關問題