Bonjour,
J'ai un petit problème avec Valgrind qui me signale un "Conditional jump or move depends on uninitialised value(s)" lors de l'affichage d'une liste chaînée.
Les structures :
La portion de code incriminée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 typedef void Objet; /* le type Element (élément de la liste) */ struct s_Element { Objet* reference; /* référence un objet */ struct s_Element* suivant; /* élément suivant de la liste */ struct s_Element* precedent; /* élément suivant de la liste */ }; typedef struct s_Element Element; /* le type Liste */ struct s_Liste { Element* premier; /* premier élément de la liste */ Element* dernier; /* dernier élément de la liste */ int nbElt; /* nombre d'élements dans la liste */ int type; /* type de liste */ char* (*toString) (Objet*); int (*comparer) (Objet*, Objet*); }; typedef struct s_Liste Liste;
Le programme compile bien en -Wall -ansi et affiche ce qui est attendu :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 void afficherListe(Liste* l) { Element* e = l->premier; printf("%d elements : ", nbEltListe(l)); while(e != NULL) { printf("%s ", l->toString(e->reference)); e = e->suivant; } }
Or Valgrind indique :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
25 elements : pladamousse kikoo test lol pasteque
C'est-à-dire que mon pointeur sur Element e ne serait pas initialisé, or l->premier l'est à l'initialisation de la liste (=NULL), et plus encore il l'est car il m'affiche ma liste correctement...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ==10534== Conditional jump or move depends on uninitialised value(s) ==10534== at 0x8048B16: afficherListe (Liste.c:146) ==10534== by 0x8048C51: main (main.c:38)
Je me demande donc si ce n'est pas simplement Valgrind qui me sort une fausse erreur. Et comment faire pour avoir un memcheck "propre" !
Merci à vous !![]()
Partager