Le problème c'est que "_CrtDumpMemoryLeaks();" ne te donnera l'emplacement concerné que pour le cas d'une allocation avec "malloc" et encore pour un projet qui ne contient qu'un fichier unique. Si tu utilises plusieurs sources, alors tu dois inclure ceci au tout début:
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
Pour les allocations avec l'opérateur new, si tu doubles-click sur la ligne concerné tu es renvoyé dans le fichier "crtdbg.h". Tu as une solution ici:
http://www.codeproject.com/debug/consoleleak.asp.
Personnellement j'utilise cette fonction:
1 2 3 4 5
| _CrtSetBreakAlloc(41);
_CrtSetBreakAlloc(42);
_CrtSetBreakAlloc(43);
_CrtSetBreakAlloc(44);
_CrtSetBreakAlloc(45); |
Comme tu peux le voir, les nombres 41, 42, 43, 44, 45, correspondent au résultat de _CrtDumpMemoryLeaks(); que tu as obtenu. Tu places ce code en tout début de programme avant toute allocation et le débuggeur s'arrêtera à chaque allocation. En regardant la pile d'appel, tu trouves assez facilement de quel allocation il s'agit. Attention, il ne faut pas modifier le code source entre temps car les nombres pourraient ne plus correspondre.
Il y a d'autres méthodes, par exemple en faisant une différences des états d'allocations dans une portion de code. Je te renvoie à la documentation. pour tout ça.
Partager