如何使用_CrtDumpMemoryLeaks()

时间:2010-01-28 10:31:00

标签: c++ visual-c++ memory-leaks

我正在尝试使用_CrtDumpMemoryLeaks()来显示程序中的内存泄漏。

但除了在没有内存泄漏的情况下返回0以及在有泄漏的情况下返回0时它不会显示任何内容。

这里的link显示输出应该是:

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 个答案:

答案 0 :(得分:17)

从以下link下载示例。您必须设置以下参数以将输出定向到控制台。

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

答案 1 :(得分:3)

在搜索为什么它在我的代码中不起作用后,我找到了以下几点:

  • 如果没有检测到泄漏,则此方法不打印任何内容。
  • 并非所有分配方法都受到影响。例如,CoTaskMemAlloc不受影响。
  • 必须使用_CrtSetReportMode和_CrtSetReportFile启用警告。