Как использовать _CrtDumpMemoryLeaks()

Я пытаюсь использовать _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.

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

Ответ 1

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

   // 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 );

Ответ 2

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

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