C++内存泄漏检测拾遗
在MFC开发环境中,当运行退出了,Visual Studio会在输出窗口提示是否有内存泄漏。也可以借助MFC类CMemoryState动态地检测并输出内存泄漏信息。
在非MFC框架中,需要借助CRT函数实现这些功能。
1. 调用_CrtDumpMemoryLeaks()函数会在输出窗口中输出当前的内存泄漏。若在程序开始处加上:_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
语句,CRT会在程序的每个出口处自动调用_CrtDumpMemoryLeaks函数,因此程序终止时会在输出窗口显示所有的内存泄漏。
2.利用_CrtMemState结构定点监测内存泄漏,例:
|
//定义3个内存状态 //记录开始的内存状态 int *p = new int; //记录结束时的内存状态 //比较2个内存状态,并将差异保存到s3中 |
| CAtlFile hFile; hFile.Create( _T("D:\ eport.txt"), GENERIC_WRITE, FILE_SHARE_WRITE, CREATE_ALWAYS ); _CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE ); _CrtSetReportFile( _CRT_WARN, hFile ); |
此外还可以重定向为窗体提示(带有"终止"、"继续"、"忽略"按钮的窗体),断言就是输出为此窗体。还可以通过_CrtSetReportHook函数在输出到指定目的地之前拦截消息。如:
_CrtSetReportHook( MyReportingFunction );
MyReportingFunction 的定义如下:
| int MyReportingFunction( int nReportType, char *szMsg, int *pRetVal ) { *pRetVal = 0; if( nReportType == _CRT_WARN ) { AtlMessageBox( NULL, _U_STRINGorID( CA2T(szMsg))); } return 0; } |
发布人信息
- 联系人:wumingwei 查看该用户发布的所有信息
- 电话:
- 邮箱:
- 地址:



