参考自:
http://blog.csdn.net/windows_nt/article/details/8652191
详细解释参考:
http://blog.csdn.net/caowei880123/article/details/7876097
使用:
调试下运行程序,退出后,如果有内存泄露则会在输出窗口得到:
Detected memory leaks!
Dumping objects ->
{58} normal block at 0x00341A38, 10 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD
Object dump complete.
配置:
非MFC程序可以用以下方法检测内存泄露:
- 程序开始包含如下定义:
//malloc memory leak detect // #define_CRTDBG_MAP_ALLOC #include<stdlib.h> #include<crtdbg.h> //new memory leak detect // //重新定义new,标记位置 是的输出内存泄露时能打印文件和行号 #define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
2.程序中添加下面的函数:
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);
注意:上面的宏必须包含的每一个要检查泄露的文件中,可以写成一个公共的头文件来包含
MFC程序内存泄漏检测方法:
1.在 CMyApp 中添加如下三个 CMemoryState 类的成员变量:
#ifdef _DEBUG protected: CMemoryState m_msOld, m_msNew, m_msDiff; #endif // _DEBUG
2.在 CMyApp::InitInstance() 中添加如下代码:
#ifdef _DEBUG m_msOld.Checkpoint(); #endif // _DEBUG
3.在 CMyApp::ExitInstance() 中添加如下代码:
#ifdef _DEBUG m_msNew.Checkpoint(); if (m_msDiff.Difference(m_msOld, m_msNew)) { afxDump<<"\nMemory Leaked :\n"; m_msDiff.DumpStatistics(); afxDump<<"Dump Complete !\n\n"; } #endif // _DEBUG