Ce qui ne l'a supprimé les fuites dire dans Valgrind?
J'ai développé un pur-C mise en œuvre de la FIFO listes (files d'attente) dans les fichiers fifo.h
et fifo.c
, et nous avons écrit un programme de test de la testfifo.c
qui je compile à ./bin/testfifo
. Le nœud de la structure est définie dans liste.h
.
J'exécute mon programme par le biais de Valgrind sur OS X 10.6 comme ce
valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./bin/testfifo
et obtenir la sortie suivante
==54688== Memcheck, a memory error detector
==54688== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==54688== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==54688== Command: bin/testfifo
==54688==
--54688-- bin/testfifo:
--54688-- dSYM directory is missing; consider using --dsymutil=yes
==54688==
==54688== HEAP SUMMARY:
==54688== in use at exit: 88 bytes in 1 blocks
==54688== total heap usage: 11 allocs, 10 frees, 248 bytes allocated
==54688==
==54688== LEAK SUMMARY:
==54688== definitely lost: 0 bytes in 0 blocks
==54688== indirectly lost: 0 bytes in 0 blocks
==54688== possibly lost: 0 bytes in 0 blocks
==54688== still reachable: 0 bytes in 0 blocks
==54688== suppressed: 88 bytes in 1 blocks
==54688==
==54688== For counts of detected and suppressed errors, rerun with: -v
==54688== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Selon la fuite résumé, il n'y a pas de fuites, mais je me demande encore ce que le "supprimé" sont des fuites. En outre, le nombre d'alloc et free ne correspondent pas, et donc je ne suis pas sûr s'il y a des fuites ou pas.
----EDIT----
De course
valgrind --tool=memcheck --leak-check=full --show-reachable=yes -v ./bin/testfifo
sur OS X 10.6 produit un assez long et confus de sortie, mais j'ai couru
valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./bin/testfifo
sur une machine Linux une obtiens ce résultat:
==32688== Memcheck, a memory error detector
==32688== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==32688== Using Valgrind-3.6.1 and LibVEX; rerun with -h for copyright info
==32688== Command: bin/testfifo
==32688==
==32688==
==32688== HEAP SUMMARY:
==32688== in use at exit: 0 bytes in 0 blocks
==32688== total heap usage: 10 allocs, 10 frees, 160 bytes allocated
==32688==
==32688== All heap blocks were freed -- no leaks are possible
==32688==
==32688== For counts of detected and suppressed errors, rerun with: -v
==32688== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 4 from 4)
alloc et gratuite est maintenant match, de sorte que le supplément d'allocation sur OS X semble être dû à un système de bibliothèque, comme cela a été suggéré.
J'ai exécuter la même commande avec le -v
option, afin de révéler le 4 supprimé les erreurs, mais je n'ai pas tout comprendre facilement de nouvelles informations.
OriginalL'auteur Genba | 2011-12-28
Vous devez vous connecter pour publier un commentaire.
Ce sont les fuites à l'extérieur de votre code, (probablement partagé) des bibliothèques ou connue de faux positifs. L'exécution de valgrind avec
-v
devrait vous informer sur les suppressions utilisé.Certains de ces derniers sont également pas de problèmes avec les bibliothèques, mais pour les bibliothèques connues pour partager la mémoire entre les processus potentiellement externe à votre application.
Yup, j'ai vu des faux positifs avec memcheck.
Merci, tout ce que l'information a été vraiment utile! J'ai essayé sur un système Linux, et désormais sais pour sûr que mon programme n'est pas une fuite de mémoire.
OriginalL'auteur cnicutar