J'ai récemment pris l'habitude d'exécuter tous mes programmes à travers valgrind
pour vérifier les fuites de mémoire, mais la plupart de ses résultats ont été un peu cryptiques pour moi.Valgrind erreurs même si tous les blocs tas ont été libérés
Pour ma dernière course, valgrind -v
m'a donné:
All heap blocks were freed -- no leaks are possible
Cela signifie mon programme couvert pour fuites de mémoire, non?
Alors qu'est-ce que cette erreur signifie? Mon programme ne lit-il pas certains blocs de mémoire correctement?
ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 14 from 9)
1 errors in context 1 of 1:
Invalid read of size 4
at 0x804885B: findPos (in /home/a.out)
by 0xADD918: start_thread (pthread_create.c:301)
by 0xA26CCD: clone (clone.S:133)
Address 0x4a27108 is 0 bytes after a block of size 40 alloc'd
at 0x4005BDC: malloc (vg_replace_malloc.c:195)
by 0x804892F: readInput (in /home/a.out)
by 0xADD918: start_thread (pthread_create.c:301)
by 0xA26CCD: clone (clone.S:133)
used_suppression: 14 dl-hack3-cond-1
Aussi, quelles sont les erreurs dites "supprimées" ici?
Ceci est l'une des erreurs supprimées, il m'a juste donné "1 erreur supprimée" quand j'ai utilisé valgrind sans -v. Donc, ce n'est pas mon mal de tête, non? –
@crypto: vous voulez dire l'erreur dans 'findPos'? Non celui-ci est pour de vrai, c'est votre code qui fait quelque chose de mal. Sans le code lui-même je ne peux que deviner, mais à partir de la dénomination de la fonction, je suppose que cela scanne un tableau et va au-delà de la limite allouée dans un cas de frontière. Compiler avec '-g' et valgrind vous dira la ligne exacte. –
Mais l'emplacement final de l'erreur est indiqué comme clone.S, sur lequel je n'ai aucun contrôle. –