C++内存泄漏检测拾遗

2011-11-09 09:36:28来源: 互联网 关键字:C++  内存  泄漏检测
在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;

  }

关键字:C++  内存  泄漏检测

编辑:神话 引用地址:http://www.eeworld.com.cn/mndz/2011/1109/article_13055.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:数字电压表的仿真电路设计
下一篇:车载酒精监测系统技术解析

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利
推荐阅读
全部
C++
内存
泄漏检测

小广播

独家专题更多

东芝在线展会——芯科技智社会创未来
东芝在线展会——芯科技智社会创未来
2017东芝PCIM在线展会
2017东芝PCIM在线展会
TI车载信息娱乐系统的音视频解决方案
TI车载信息娱乐系统的音视频解决方案
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2017 EEWORLD.com.cn, Inc. All rights reserved