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