前提:在Debug模式下
步骤:1. 在程序开始处CXXApp::InitInstance()函数第一行添加以下代码
#if _DEBUG
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
#endif
_CRTDBG_LEAK_CHECK_DF参数会在程序退出时自动检测内存泄漏,如果程序没有是否所有分配的内存,就生成报告(自动调用_CrtDumpMemoryLeaks())。
2.当内存泄漏时,生成的报告如下
Detected memory leaks!
Dumping objects ->
d:\工作\test\memoryleaktest\memoryleaktest\memoryleaktestdlg.cpp(156) : {157} normal block at 0x002598A0, 20 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.
说明
{157} normal block at 0x002598A0, 20 bytes long.中157代表从程序开始第157个alloc的对象,20 bytes是申请的内存大小。
3.跟踪到分配此内存的地方
在之前代码的#endif之前调用函数_CrtSetBreakAlloc函数,输入参数为alloc内存的序号。如上边的157
4.按F5调试运行,程序会自动在分配此内存处Break.