2009-10-08 6 views
2

Valgrind me dit la fonction xxx mémoire allouée qui n'a pas été libérée. Bien. Il s'avère plus difficile que d'habitude de tracer cependant.Comment puis-je obtenir valgrind pour me dire l'adresse de chaque bloc de mémoire non-libéré?

À cette fin, je l'ai créé nombreux:

#ifdef DEBUG 
fprintf(stderr, "something happening:%lx\n", (unsigned long)ptr); 
#endif 

donc j'ai juste besoin de faire correspondre ces ptr adresses qui sont affichées avec les adresses de mémoire non libérés. Comment puis-je obtenir valgrind pour me dire l'adresse de chaque bloc de mémoire non-libéré?

Répondre

1

Je ne crois pas que le vérificateur de fuite de Memcheck prenne en charge les adresses d'impression, malheureusement. Cela est dû au fait qu'il est prêt à fusionner plusieurs blocs non alloués dans un "rapport de perte" s'ils sont similaires. Si cela ne vous dérange pas de fouiller dans Memcheck, cette fonctionnalité devrait pouvoir être ajoutée dans memcheck/mc_leakcheck.c dans la source de Valgrind. Je vais jeter un coup d'œil quand je rentre à la maison et afficher un emplacement plus détaillé.

1

Merci à Falaina pour l'emplacement du code. Pour valgrind-3.2.3, l'emplacement qui a fonctionné pour moi était dans memcheck/mc_leakcheck.c, fonction lc_scan_memory_WRK.

Ajouté après lc_markstack_push_WRK (addr, clique); sur la ligne # 472

si (clique! = -1) {VG_ (printf) ("clique% d:% p \ n", clique, ptr); }

+1

Ceci doit être ajouté à memcheck comme une option appropriée –

Questions connexes