(转贴)C/C++程序内存泄漏检测

原帖地址:http://blog.163.com/pear_0426/blog/static/128907752007102492715907/

1. 包含头文件和定义:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
如果定义了_CRTDBG_MAP_ALLOC,打印出来的是文件名和行数等更加直观的信息。

2. 方法一
在程序入口写几个语句:
 int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );
 tmpFlag |= _CRTDBG_LEAK_CHECK_DF;
 _CrtSetDbgFlag( tmpFlag );
程序退出时,如果发现有内存泄漏,会自动在DEBUG OUTPUT窗口和DebugView中输出内存泄漏信息。

3. 方法二
在程序任何地方用以下语句:
_CrtDumpMemoryLeaks();
随时检测打印内存泄漏信息,如果有的话。不过此用法有个局限,对于一些全局函数,如果初始化时申请了内存,到程序结束时候才释放,此函数会一直把新申请的内存当作泄漏来对待。

4. 方法三
使用_CrtMemCheckpoint方法,在某段程序中统计泄漏信息。如下:
 _CrtMemState s1, s2, s3;
 _CrtMemCheckpoint( &s1 );
 
 // 程序段1:DO SOMETHING

 _CrtMemCheckpoint( &s2 );
 if ( _CrtMemDifference( &s3, &s1, &s2) )
  _CrtMemDumpStatistics( &s3 );

可以统计程序段1中是否发生了内存泄漏。

posted on 2008-01-22 09:48 迷宫の未来 阅读(1599) 评论(3)  编辑 收藏 引用

评论

# re: (转贴)C/C++程序内存泄漏检测 2008-01-22 10:05 梦在天涯

不错!!!!  回复  更多评论   

# re: (转贴)C/C++程序内存泄漏检测 2008-01-22 10:24 duguguiyu

虽然是有用的东西。但不明白为什么明明是转贴却要放到首页原创精华区??。。。  回复  更多评论   

# re: (转贴)C/C++程序内存泄漏检测[未登录] 2008-01-22 11:04 cppexplore

意义不大
首先 无论是win下还是linux下 都有很出色的内存检测工具。这些工具已经成为测试程序的必须,而不是可选。
其次 不论是内存检测工具 还是文中所述方法 都只能检测严格的内存泄漏,比如base *a=new A(); base *b=new B(); a=b;则对原a的内存控制完全失去,此为内存泄漏。完全的内存检测 还要配合 完善的log机制 交互式查看系统信息等附加功能
最后,小trick,又是转贴,和楼上意见一样,就不要放首页了。  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2008年1月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

常用链接

留言簿(10)

随笔档案

文章档案

最新随笔

搜索

积分与排名

最新随笔

最新评论

阅读排行榜

评论排行榜