_CRTDBG_MAP_ALLOC не показывает имя файла

Я пытаюсь обнаружить утечку памяти, и я использую макрос make _CRTDBG_MAP_ALLOC для определения места утечки. Итак, я определяю MACRO следующим образом:

#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

В моем коде у меня есть:

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;
}

(Спасибо Тушару Джадхаву: Потребление памяти быстро увеличивается, затем падает очень медленно; утечка памяти?)

Но вывод показывает что-то вроде:

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

вместо чего-то вроде этого:

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.

Так, как я могу заставить это показать имя файла и местоположение утечки?

18

Решение

В моем случае я в конечном итоге включил материал из этот нить в мой код. Это отменяет new оператор и включает в себя имя файла и номер строки в нем для последующей печати. Не уверен, что это применимо только к Visual Studio.

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

Весь тестовый код из указанного источника:

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

int main()
{
char *a = new char[10];
_CrtDumpMemoryLeaks();
return 0;
}

который в моем тестовом случае печатает:

Detected memory leaks!
Dumping objects ->
e:\test\testapplication\testapplication.cpp(11) : {144} normal block at 0x007F4EF0, 10 bytes long.
Data: <          > CD CD CD CD CD CD CD CD CD CD
Object dump complete.
11

Другие решения

Кажется, строка утечки отображается только в том случае, если в этом файле cpp включена CRT.

7

По вопросам рекламы [email protected]