2010-11-06 4 views
8

Ich bekomme viele Fehler mit Valgrind sagen "Bedingter Sprung oder Bewegung hängt von nicht initialisierten Wert (en)".Valgrind "Bedingter Sprung oder Bewegung hängt von nicht initialisierten Werten ab" Fehler

Unten ist der eine der Blöcke. Alle sind ähnlich:

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

Der Fehler selbst ist auf der while() Zeile. vasm_sourceline_info ist eine doppelt verknüpfte Listenstruktur. Der Code ~ funktioniert ~, aber dieser Fehler ist beunruhigend. Gibt es noch etwas anderes im Code, der im Speicher stampft, oder ist die obige Funktion irgendwie fehlerhaft?

+3

Sind alle nächsten Zeiger initialisiert? – CodesInChaos

+2

Sie wissen, dass Sie denken würden, dass das wäre die erste Sache, die ich betrachten würde ... Nein, obwohl ich in der add/remove/append-Logik, die Initialisierungsfunktion nicht gesetzt NEXT/prev auf NULL ... Problem gelöst . Vielen Dank! –

+0

es passiert manchmal oder ich auch in gültigen Code. –

Antwort

6

Es ist nichts falsch mit dem Code per se, aber wenn einer der Zeilen 'next Feld wurde nicht initialisiert (vermutlich die letzte Zeile next Feld), würde dies die Nachricht zu erklären.

14

Kompilieren Sie mit Optimierungen OFF (-O0). Führen Sie Valgrind mit --track-origins=yes aus, um die Quelle der Fehler zu ermitteln. Siehe here für mehr.