2010-11-06 9 views
8

Ricevo molti errori con valgrind che dice "Il salto condizionato o lo spostamento dipende dal/i valore/i non inizializzato/i".Valgrind "Salto condizionale o spostamento dipende dal/i valore/i non inizializzato/i" Errore

Di seguito è riportato uno dei blocchi. Tutti loro sono simili:

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); 
} 

L'errore stesso è sulla linea while(). vasm_sourceline_info è una struttura di lista doppiamente collegata. Il codice ~ funziona ~ ma questo errore è preoccupante. C'è qualcos'altro nel codice che calpesta la memoria, o la funzione sopra descritta è difettosa in qualche modo?

+3

sono inizializzati tutti i puntatori successivi? – CodesInChaos

+2

Sai che penseresti che sarebbe la prima cosa che guarderei ... No, anche se mi prendo cura della logica add/remove/append, la funzione di inizializzazione NON è stata impostata su next/prev su NULL ... Problema risolto . Grazie! –

+0

capita anche a me in codice valido a volte. –

risposta

6

Non c'è niente di sbagliato nel codice di per sé, ma se uno dei campi "next campo non è stato inizializzato (presumibilmente il campo next della riga precedente), ciò spiegherebbe il messaggio.

14

Compilare con ottimizzazioni OFF (-O0). Eseguire valgrind con --track-origins=yes per determinare l'origine degli errori. Vedi here per ulteriori informazioni.

Problemi correlati