2015-09-23 2 views
0

Je débute en C++ et utilise memcheck pour vérifier mes programmes de fuites de mémoire.Memcheck - module de source inconnue pour la fuite de mémoire

Si (quand ...) il y a des fuites, je reçois la sortie Unfreed memory allocations remaining, dont l'utilisation de new, malloc etc qui ne sont pas libérés. Ils sont généralement accompagnés du fichier source et du numéro de ligne de l'allocation, ce qui facilite la résolution.

Parfois, le module source est répertorié sous unknown line:0, pour les appels à new dans mon cas. Si memcheck sait qu'un appel à new a été fait, comment se fait-il qu'il ne puisse pas dire d'où cela vient? J'essaie juste de comprendre comment ces fuites peuvent provenir.

Répondre

0

Je suppose qu'il ne pouvait tout simplement pas résoudre la trace de la pile correctement. Cela arrive avec de tels outils (VLD, Deleaker etc.) quand ils essayent de résoudre la trace de la pile en mode rapide (par exemple lire EBP/ESP sur x86) et les pointeurs de frames manqués, ou quand ils essayent de résoudre la trace de la pile. l'information est incorrecte ou simplement absente.

Dans la plupart des cas, la trace de pile peut être résolue correctement. Parfois - pas.