您现在的位置: 主页 > 电子技术 > EDA > C++内存泄漏检测拾遗 -
本文所属标签:
为本文创立个标签吧:

C++内存泄漏检测拾遗 -

来源: 网络用户发布,如有版权联系网管删除 2018-08-09 

[导读]在MFC开发环境中,当运行退出了,Visual Studio会在输出窗口提示是否有内存泄漏。也可以借助MFC类CMemoryState动态地检测并输出内存泄漏信息。
在非MFC框架中,需要借助CRT函数实现这些功能。
1. 调用_CrtDumpMemory

在MFC开发环境中,当运行退出了,Visual Studio会在输出窗口提示是否有内存泄漏。也可以借助MFC类CMemoryState动态地检测并输出内存泄漏信息。

在非MFC框架中,需要借助CRT函数实现这些功能。

1. 调用_CrtDumpMemoryLeaks()函数会在输出窗口中输出当前的内存泄漏。若在程序开始处加上:_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

语句,CRT会在程序的每个出口处自动调用_CrtDumpMemoryLeaks函数,因此程序终止时会在输出窗口显示所有的内存泄漏。

2.利用_CrtMemState结构定点监测内存泄漏,例:

//定义3个内存状态

_CrtMemState s1,s2,s3;

//记录开始的内存状态

_CrtMemCheckpoint( &s1 );

int *p = new int;

//记录结束时的内存状态

_CrtMemCheckpoint( &s2 );

//比较2个内存状态,并将差异保存到s3中

if( _CrtMemDifference( &s3, &s1, &s2 ) )

{

//输出内存泄漏信息

_CrtMemDumpAllObjectsSince( &s3 );

}

3. 重定向输出信息。内存泄漏提示默认是输出在输出窗口中,可以通过_CrtSetReportMode重定向其输出位置。例(重定向输出到指定文件):

CAtlFile hFile;

hFile.Create( _T("D:\report.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;

}



来源:香香公主0次

本文引用地址: http://www.21ic.com/app/eda/201806/769157.htm



              查看评论 回复



嵌入式交流网主页 > 电子技术 > EDA > C++内存泄漏检测拾遗 -
 

"C++内存泄漏检测拾遗 -"的相关文章

网站地图

围观()