您现在的位置:融合网首页 > 芯片 > 技术 >

C++内存泄漏检测拾遗

来源:融合网|DWRH.net  作者:网络 责任编辑:admin 发表时间:2011-05-30 08:15 
核心提示:在MFC开发环境中,当运行退出了,Visual Studio会在输出窗口提示是否有内存泄漏。也可以借助MFC类CMemoryState动态地检测并输出内存泄漏信息。 在非MFC框架中,需要借助CRT函数实现这些功能。 1、调用_CrtDumpMemoryLeaks()函数会在输出窗口中输出当前的内

在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;

}

(责任编辑:admin)
    • “扫一扫”关注融合网微信号

    免责声明:我方仅为合法的第三方企业注册用户所发布的内容提供存储空间,融合网不对其发布的内容提供任何形式的保证:不保证内容满足您的要求,不保证融合网的服务不会中断。因网络状况、通讯线路、第三方网站或管理部门的要求等任何原因而导致您不能正常使用融合网,融合网不承担任何法律责任。

    第三方企业注册用户在融合网发布的内容(包含但不限于融合网目前各产品功能里的内容)仅表明其第三方企业注册用户的立场和观点,并不代表融合网的立场或观点。相关各方及作者发布此信息的目的在于传播、分享更多信息,并不代表本网站的观点和立场,更与本站立场无关。相关各方及作者在我方平台上发表、发布的所有资料、言论等仅代表其作者个人观点,与本网站立场无关,不对您构成任何投资、交易等方面的建议。用户应基于自己的独立判断,自行决定并承担相应风险。

    根据相关协议内容,第三方企业注册用户已知悉自身作为内容的发布者,需自行对所发表内容(如,字体、图片、文章内容等)负责,因所发表内容(如,字体、图片、文章内容等)等所引发的一切纠纷均由该内容的发布者(即,第三方企业注册用户)承担全部法律及连带责任。融合网不承担任何法律及连带责任。

    第三方企业注册用户在融合网相关栏目上所发布的涉嫌侵犯他人知识产权或其他合法权益的内容(如,字体、图片、文章内容等),经相关版权方、权利方等提供初步证据,融合网有权先行予以删除,并保留移交司法机关查处的权利。参照相应司法机关的查处结果,融合网对于第三方企业用户所发布内容的处置具有最终决定权。

    个人或单位如认为第三方企业注册用户在融合网上发布的内容(如,字体、图片、文章内容等)存在侵犯自身合法权益的,应准备好具有法律效应的证明材料,及时与融合网取得联系,以便融合网及时协调第三方企业注册用户并迅速做出相应处理工作。

    融合网联系方式:(一)、电话:(010)57722280;(二)、电子邮箱:2029555353@qq.com dwrh@dwrh.net

    对免责声明的解释、修改及更新权均属于融合网所有。

    热门关键字

    关于我们 - 融合文化 - 媒体报道 - 在线咨询 - 网站地图 - TAG标签 - 联系我们
    Copyright © 2010-2020 融合网|DWRH.net 版权所有 联系邮箱:dwrh@dwrh.net 京公网安备 11011202002094号 京ICP备11014553号