Bonjour à tous,
Je suis étudiant en informatique et je programme un projet en C norme POSIX sous FreeBSD (j'ai pas la version en tête).
Tout allait bien avec mes listes chainées jusqu'à ce que je fasse mumuse avec.
Et la Valgrind est devenu tout rouge et à commencé à m'insulter, moi, pauvre petit étudiant pas toujours studieux mais de bonne volonté !
Je ne vais pas mettre toutes les erreurs qu'il m'a mis mais voici un condensé :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| ==64910== Use of uninitialised value of size 4
==64910== at 0x8049D2C: rebuild (in /home/nyromancer/prog_c/bonux/exec/aff_termcaps)
==64910== by 0x8049E87: del_elem (in /home/nyromancer/prog_c/bonux/exec/aff_termcaps)
==64910== by 0x804946F: destroy_list (in /home/nyromancer/prog_c/bonux/exec/aff_termcaps)
==64910== by 0x80494F9: destroy (in /home/nyromancer/prog_c/bonux/exec/aff_termcaps)
==64910==
==64910== Invalid read of size 4
==64910== at 0x8049D2C: rebuild (in /home/nyromancer/prog_c/bonux/exec/aff_termcaps)
==64910== by 0x8049E87: del_elem (in /home/nyromancer/prog_c/bonux/exec/aff_termcaps)
==64910== by 0x804946F: destroy_list (in /home/nyromancer/prog_c/bonux/exec/aff_termcaps)
==64910== by 0x80494F9: destroy (in /home/nyromancer/prog_c/bonux/exec/aff_termcaps)
==64910== Address 0x3C15942C is 16 bytes inside a block of size 20 free'd
==64910== at 0x3C034687: free (in /usr/local/lib/valgrind/vgpreload_memcheck.so)
==64910== by 0x804B18D: xfree (in /home/nyromancer/prog_c/bonux/exec/aff_termcaps)
==64910== by 0x8049E7C: del_elem (in /home/nyromancer/prog_c/bonux/exec/aff_termcaps)
==64910== by 0x804946F: destroy_list (in /home/nyromancer/prog_c/bonux/exec/aff_termcaps)
==64910==
==64910== Conditional jump or move depends on uninitialised value(s)
==64910== at 0x8049475: destroy_list (in /home/nyromancer/prog_c/bonux/exec/aff_termcaps)
==64910== by 0x80494F9: destroy (in /home/nyromancer/prog_c/bonux/exec/aff_termcaps)
==64910== by 0x804A280: main (in /home/nyromancer/prog_c/bonux/exec/aff_termcaps) |
Les autres sont les même mais repérées ailleurs pas valgrind je crois.
J'ai donc regardé, et j'ai vu qu'une grosse part de mes problêmes semblaient resider dans ce genre de tests : if (elem).
"elem" étant un élément d'un liste chainée.
Je voudrais donc savoir comment protéger mes fonctions en testant si mes maillons ne sont pas égaux à 0 mais sans avoir ces erreurs.
Merci d'avance,
Nyro.
Partager