2013-03-27 5 views
0

Я использую 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; 
} 

не может получить причину.

ответ

3

Обратите внимание, что если вы установили _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
c: \ consoleapplication1.cpp (22): {189} обычный блок при 0x004CCAB0, 4 байта в длину.
Данные: < L> F0 CA 4C 00
Сброс объекта завершен.

+0

thanxs, я получил его, – user1808932

Смежные вопросы