_CRTDBG_MAP_ALLOC ne montrant pas de nom de fichier

Je suis en train d'essayer de détecter les fuites de mémoire, et je suis en utilisant faire _CRTDBG_MAP_ALLOC macro permettant de localiser les fuites de la zone. Donc, je suis à la définition de la MACRO comme suit:

#ifdef _DEBUG
    #define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
    #define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
    #define new DEBUG_NEW
#endif

Dans mon code, j'ai:

UINT SomeFunThread( LPVOID pParam )
{
   _CrtMemState crtMemStateStart;
    _CrtMemState crtMemStateFinish;

    _CrtMemCheckpoint(&crtMemStateStart);


    //My suspisious code


     _CrtMemCheckpoint(&crtMemStateFinish);

      int nDifference(0);
      _CrtMemState crtMemStateDifference;
      nDifference = _CrtMemDifference(&crtMemStateDifference, &crtMemStateStart, &crtMemStateFinish);

    if(nDifference > 0)
        _CrtDumpMemoryLeaks();

    return 0;
}

(Grâce à Tushar Jadhav: La consommation de mémoire augmente rapidement, puis diminue très lentement; fuite de mémoire?)

Mais le résultat montre quelque chose comme:

Detected memory leaks!
Dumping objects ->
{124058} normal block at 0x0000000031DED080, 24 bytes long.
 Data: < 0      ` $     > C8 30 F7 EF FE 07 00 00 60 D2 24 1D 00 00 00 00 

au lieu de quelque chose comme ceci:

Detected memory leaks!
Dumping objects ->
C:\PROGRAM FILES\VISUAL STUDIO\MyProjects\leaktest\leaktest.cpp(20) : {18} 
normal block at 0x00780E80, 64 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.

Alors, comment puis-je faire de ce spectacle un nom de fichier et l'emplacement de la fuite?

  • Le code qui alloue juste n'a pas été compilé avec votre #définit en effet. Peuvent être situées dans une bibliothèque, pourrait être dans une DLL, comme les prêts à l'emploi C++ classe de modèle de spécialisations. Ou la DLL qui contient le code fut déchargé avant la fuite rapport a été généré.
  • Alors, êtes-vous dire que ce n'était pas mon "suspect" du code lui-même, qui fuit; c'était un peu de code/bianraies/dll appelées dans "les codes suspects" ?
  • Je dirais que c'est un code que vous n'avez pas trouvé, pourrait être n'importe où. L'habituel problème avec les fuites, n'est-ce pas? Si vous pouvez obtenir le nombre entre {accolades} répéter ensuite définir _crtBreakAlloc à ce nombre.
InformationsquelleAutor Nick X Tsui | 2013-11-20