检测C++的内存泄漏用哪些工具

来源:计算机等级考试    发布时间:2012-08-28    计算机等级考试视频    评论

  int _tmain(int argc, _TCHAR* argv[])

  {

  int* p = new int();

  _CrtDumpMemoryLeaks();

  return 0;

  }

  该程序定义了几个宏,通过宏将Debug版本下的new给替换了,新的new记录下了调用new时的文件名和代码行.运行后,可以看到如下的结果:

  Detected memory leaks!

  Dumping objects ->

  d:/code/consoletest/consoletest.cpp(21) : {112} client block at 0x003A38B0, subtype 0, 4 bytes long.

  Data: <    > 00 00 00 00

  Object dump complete.

  呵呵,已经和MFC程序的效果一样了,但是等一等。看下如下的代码吧:

  int _tmain(int argc, _TCHAR* argv[])

  {

  int* p = new int();

  _CrtDumpMemoryLeaks();

  delete p;

  return 0;

  }

  运行后可以发现我们删除了指针,但是它仍然报内存泄露。所以可以想象,每调用一次new,程序内部都会将该调用记录下来,类似于有个数组记录,假如delete了,那么就将其从数组中删除,而_CrtDumpMemoryLeaks()就是把这个数组当前的状态打印出来。

  所以除了在必要的时候Dump出内存信息外,最重要的就是在程序退出的时候需要掉用一次_CrtDumpMemoryLeaks();

  假如程序有不止一个出口,那么我们就需要在多个地方都调用该函数。

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答