Я использую 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;
}
не могу понять причину.
Обратите внимание, что если вы установили _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
Дамп объекта завершен.
Других решений пока нет …