C 内存泄漏检测拾遗计算机等级考试

文章作者 100test 发表时间 2009:07:09 21:49:59
来源 100Test.Com百考试题网


  在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 内存泄漏检测拾遗计算机等级考试
利用Thunk让C 成员函数变回调函数计算机等级考试
C 实现不可被拷贝的类计算机等级考试
探讨C 实现一个不可被继承的类计算机等级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛