C++代码中的内存泄漏检查工具如何做

如何检查C++中的内存泄漏_百度知道
如何检查C++中的内存泄漏
我有更好的答案
在程序开头添加:// 内存泄露检测#define _CRTDBG_MAP_ALLOC #include &stdlib.h& #include &crtdbg.h&在程序最开始,比如构造函数中添加:_CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF);
// 设置CRT库中的内存泄露检测标记 _CrtSetBreakAlloc(55);
// 设置Alloc分配&块号&为&55&处的断点第二句参数可由VS输出窗口中获得
采纳率:33%
p= //p指针修改,原来申请内存的地址没有记录下来,于是无法释放 下面介绍如何检查内存泄漏:1.包含头文件和定义#define _CRTDBG_MAP_ALLOC //并非绝对需要该语句,但如果有该语句,打印出来的是文件名和行数等更加直观的信息#include &stdlib.h&#include &crtdbg.h&(1)#include语句必须采用上文所示顺序。如果更改了顺序,所使用的函数可能无法正确工作(2)如果有cpp文件无法看到这三行,以下函数就无效了,于是应该把这三行放到一个头文件里,确保每个cpp文件会调用到它2.方法一:使用_CrtDumpMemoryLeaks()int main(int argc , char* argv[]){{}_CrtDumpMemoryLeaks();return 0;}output:Detected memory leaks!Dumping objects -&{49} normal block at 0x0 bytes long.Data: & & CD CD CD CDObject dump complete.其内容包括:内存分配型号(在大括号内)、块类型(普通、客户端或 CRT)、 十六进制形式的内存位置、以字节为单位的块大小、以字节为单位的块大小、前 16 字节的内容(十六进制)注意:(1)大括号的位置,如果不加{},这块内存是等到main函数结束才泄漏的,而_CrtDumpMemoryLeaks()是在main函数里调用的,于是判断内存泄漏class A{public:int* DA(){Data=}~A(){delete D}};int main(int argc , char* argv[]){A T_CrtDumpMemoryLeaks();return 0;}output:Detected memory leaks!Dumping objects -&{49} normal block at 0x0 bytes long.Data: & & CD CD CD CDObject dump complete.(2)对于一些全局函数,如果初始化时申请了内存,到程序结束时候才释放,此函数会一直把新申请的内存当作泄漏来对待A Tint main(int argc , char* argv[]){_CrtDumpMemoryLeaks();return 0;}output:Dumping objects -&{49} normal block at 0x0 bytes long.Data: & & CD CD CD CDObject dump complete.2.方法二:在程序入口写几个语句,程序退出时,如果发现有内存泄漏,会自动在DEBUG OUTPUT窗口和DebugView中输出内存泄漏信息int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );tmpFlag |= _CRTDBG_LEAK_CHECK_DF;_CrtSetDbgFlag( tmpFlag );3.方法三:使用_CrtMemCheckpoint(),可以查出某程序段的内存泄漏情况int main(int argc , char* argv[]){CrtMemState s1, s2, s3;_CrtMemCheckpoint( &s1 ); //程序段 _CrtMemCheckpoint( &s2 );if ( _CrtMemDifference( &s3, &s1, &s2) ) _CrtMemDumpStatistics( &s3 );return 0;}output: bytes in 0 Free Blocks.4 bytes in 1 Normal Blocks.0 bytes in 0 CRT Blocks.0 bytes in 0 Ignore Blocks.0 bytes in 0 Client Blocks.
你可以用用这个工具Valgrind
为您推荐:
其他类似问题
内存泄漏的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。c++程序,检测内存是否泄漏?有什么工具,或者方法吗?
[问题点数:100分,结帖人daremeself]
c++程序,检测内存是否泄漏?有什么工具,或者方法吗?
[问题点数:100分,结帖人daremeself]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2011年5月 C/C++大版内专家分月排行榜第二2010年9月 C/C++大版内专家分月排行榜第二
2009年11月 C/C++大版内专家分月排行榜第三
2012年11月 Linux/Unix社区大版内专家分月排行榜第二2011年8月 Linux/Unix社区大版内专家分月排行榜第二2008年10月 C/C++大版内专家分月排行榜第二
2012年8月 Linux/Unix社区大版内专家分月排行榜第三
2011年9月 C/C++大版内专家分月排行榜第二2011年4月 C/C++大版内专家分月排行榜第二2010年11月 C/C++大版内专家分月排行榜第二
2011年6月 C/C++大版内专家分月排行榜第三
2014年 总版技术专家分年内排行榜第二
2013年 总版技术专家分年内排行榜第三
2014年 总版技术专家分年内排行榜第二
2013年 总版技术专家分年内排行榜第三
2014年 总版技术专家分年内排行榜第二
2013年 总版技术专家分年内排行榜第三
2011年8月 C/C++大版内专家分月排行榜第二
2010年12月 C/C++大版内专家分月排行榜第三
匿名用户不能发表回复!|请问如何检测自己的程序有没有内存泄漏?
[问题点数:40分,结帖人weifirst118]
请问如何检测自己的程序有没有内存泄漏?
[问题点数:40分,结帖人weifirst118]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2011年5月 Linux/Unix社区大版内专家分月排行榜第一2011年4月 Linux/Unix社区大版内专家分月排行榜第一2011年3月 Linux/Unix社区大版内专家分月排行榜第一2010年12月 Linux/Unix社区大版内专家分月排行榜第一2010年11月 Linux/Unix社区大版内专家分月排行榜第一2010年10月 Linux/Unix社区大版内专家分月排行榜第一2010年9月 Linux/Unix社区大版内专家分月排行榜第一2010年8月 Linux/Unix社区大版内专家分月排行榜第一2010年7月 Linux/Unix社区大版内专家分月排行榜第一2010年6月 Linux/Unix社区大版内专家分月排行榜第一2010年5月 Linux/Unix社区大版内专家分月排行榜第一2010年4月 Linux/Unix社区大版内专家分月排行榜第一2010年3月 Linux/Unix社区大版内专家分月排行榜第一2010年2月 Linux/Unix社区大版内专家分月排行榜第一2010年1月 Linux/Unix社区大版内专家分月排行榜第一2009年10月 Linux/Unix社区大版内专家分月排行榜第一2009年9月 Linux/Unix社区大版内专家分月排行榜第一
2011年7月 Linux/Unix社区大版内专家分月排行榜第二2011年6月 Linux/Unix社区大版内专家分月排行榜第二2011年2月 Linux/Unix社区大版内专家分月排行榜第二
匿名用户不能发表回复!|这个页面不在了大家有什么好的方法来检测和定位C/C++中内存泄露
大家有什么好的方法来检测开发过程中是否有内存泄露,有如何快速定位,需要通用一些的方法,因为存在你接管别人代码的可能,代码不是你写的,还有不同的平台检测方法肯定也不一样,说明方法时请注明是window环境还是linux环境。
希望大家说出自己的方法,不同的回答可供大家完善自己,谢谢
Windows 有个叫vld()的工具,把头文件包进每个工程预编译,编好后操作功能,结束后如果有泄漏就会有堆栈信息输出。
关于伯乐小组
这里有好的话题,有启发的回复和值得信任的圈子。
新浪微博:
推荐微信号
(加好友请注明来意)
- 好的话题、有启发的回复、值得信赖的圈子
- 分享和发现有价值的内容与观点
- 为IT单身男女服务的征婚传播平台
- 优秀的工具资源导航
- 翻译传播优秀的外文文章
- 国内外的精选博客文章
- UI,网页,交互和用户体验
- 专注iOS技术分享
- 专注Android技术分享
- JavaScript, HTML5, CSS
- 专注Java技术分享
- 专注Python技术分享
& 2018 伯乐在线

我要回帖

更多关于 c 内存泄漏检查工具 的文章

 

随机推荐