Как использовать _CrtDumpMemoryLeaks () - PullRequest
10 голосов
/ 28 января 2010

Я пытаюсь использовать _CrtDumpMemoryLeaks () для отображения утечек памяти в моих программах.

Но он не отображает ничего, кроме возврата 0 в случае отсутствия утечек памяти и 1 в случае утечки.

Ссылка здесь показывает, что выходные данные должны быть такими:

Detected memory leaks!
Dumping objects ->
D:\VisualC++\CodeGuru\MemoryLeak\MemoryLeak.cpp(67) : {60} 
normal block at 0x00324818, 4 bytes long.
Data: <,   > 2C 00 00 00 
Object dump complete.

Может кто-нибудь предложить правильный способ использования этой функции.

Ответы [ 2 ]

17 голосов
/ 28 января 2010

Загрузите образец по следующей ссылке . Вы должны установить следующие параметры для прямого вывода на консоль.

   // Send all reports to STDOUT
   _CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );
   _CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDOUT );
   _CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_FILE );
   _CrtSetReportFile( _CRT_ERROR, _CRTDBG_FILE_STDOUT );
   _CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE );
   _CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDOUT );
3 голосов
/ 03 августа 2010

После поиска, почему это не работает в моем коде, я нахожу следующие пункты:

  • Если утечки не обнаружено, этот метод ничего не печатает.
  • Это влияет не на все методы распределения. Например, CoTaskMemAlloc не затрагивается.
  • Предупреждение должно быть включено с помощью _CrtSetReportMode и _CrtSetReportFile.
...