找回密码
 开放注册

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

搜索
查看: 1016|回复: 2

C++内存泄漏检测拾遗

[复制链接]

45

主题

31

回帖

133

牛毛

一级牛人

尖叫```

积分
133
发表于 2009-7-18 18:37:35 | 显示全部楼层 |阅读模式 来自 广东省汕头市
在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; }

246

主题

98

回帖

675

牛毛

一级牛人

黑客帝国

积分
675
发表于 2009-7-18 20:59:02 | 显示全部楼层 来自 河北省沧州市
看不懂,c++接触很少,学习学习。

0

主题

167

回帖

229

牛毛

一级牛人

积分
229
发表于 2009-9-11 11:25:13 | 显示全部楼层 来自 湖南省湘潭市
看看  是什么啊
您需要登录后才可以回帖 登录 | 开放注册

本版积分规则

帮助|Archiver|小黑屋|通信管理局专项备案号:[2008]238号|NB5社区 ( 皖ICP备08004151号;皖公网安备34010402700514号 )

GMT+8, 2025-4-28 15:51 , Processed in 0.145080 second(s), 43 queries .

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表