2010-11-06 4 views
8

Je reçois beaucoup d'erreurs avec valgrind disant "Le saut ou le déplacement conditionnel dépend de la (des) valeur (s) non initialisée (s)".Valgrind "Le saut ou le déplacement conditionnel dépend de la (des) valeur (s) non initialisée (s)" Erreur

Ci-dessous est l'un des blocs. Tous sont similaires:

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'erreur elle-même est sur la ligne while(). vasm_sourceline_info est une structure de liste doublement liée. Le code ~ fonctionne ~ mais cette erreur est inquiétante. Y a-t-il quelque chose d'autre dans le code qui piétine la mémoire, ou est-ce que la fonction ci-dessus est défectueuse d'une façon ou d'une autre?

+3

Tous les pointeurs suivants sont-ils initialisés? – CodesInChaos

+2

Vous savez que vous penseriez que ce serait la première chose que je regarderais ... Non, bien que je prenne soin de la logique add/remove/append, la fonction d'initialisation n'a pas mis next/prev à NULL ... Problème résolu . Merci! –

+0

ça arrive ou moi aussi en code valide parfois. –

Répondre

6

Il n'y a rien de mal avec le code en soi, mais si l'un des champs des lignes next n'a pas été initialisé (vraisemblablement le champ next de la dernière ligne), cela expliquerait le message.

14

Compile avec les optimisations OFF (-O0). Exécutez valgrind avec --track-origins=yes pour déterminer la source des erreurs. Voir here pour plus.

Questions connexes