Не удается увидеть утечку памяти на консоли

Я использую Visual Studio 2010, я пытался использовать библиотеку CRT, предоставляемую VC для утечек памяти. но я не могу увидеть распечатки утечек памяти на консоли.
кодовая:

#include <iostream>
#include <vector>

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

using namespace std;

int main( )
{
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
int Y = 1;
int X = 2;
int** superevil = new int*[Y];
for(int i = 0; i < Y; ++i)
superevil[i] = new int[X];

superevil[0][2] = 1;

/*for(int i = 0; i < Y; ++i)
delete[] superevil[i];
delete[] superevil;*/

_CrtDumpMemoryLeaks();
return 0;
}

не могу понять причину.

1

Решение

Обратите внимание, что если вы установили _CRTDBG_LEAK_CHECK_DF, вам не нужно звонить _CrtDumpMemoryLeaks() Кроме того, потому что он вызывается автоматически для вас в конце программы. На самом деле, в месте, которое вы назвали _CrtDumpMemoryLeaks(), утечки еще не произошло.

Кроме того, это работает только в сборках Debug, запускаемых через IDE, и вывод — если таковой имеется — выводится в окно вывода в Visual Studio, а не на консоль.

Если вы удалите вызов _CrtDumpMemoryLeaks() и запустить через IDE, вы увидите нечто похожее на следующее (я использовал VS2012):

Обнаружены утечки памяти!
Сброс объектов ->
c: \ consoleapplication1.cpp (24): {190} нормальный блок с размером 0x004CCAF0, длиной 8 байт.
Данные: < > CD CD CD CD CD CD CD CD
c: \ consoleapplication1.cpp (22): {189} нормальный блок с размером 0x004CCAB0, длиной 4 байта.
Данные: < L> F0 CA 4C 00
Дамп объекта завершен.

4

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

Других решений пока нет …

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