Qt creator 搭配 valgrind 检测内存泄漏

  继上次重载operator new检测内存泄漏失败之后,妥协了。决定不管是否是准确指明哪一行代码出现内存泄漏,只要告诉我是否有泄漏就行了,这样就没有new替换的问题。在开发中,总是一个个小功能的开发。如果开发完一个小功能告诉我有内存泄漏,那想必也是比较容易找的。

  这次的想法是重写operator new,然后每次new的时候记录一下地址及申请内存的大小,释放时删除记录。这样,程序结束时剩余的记录就是泄漏的了。记录的数据结构首选STL的map。结果,在记录时,map需要申请内存,调用new,new需要调用map来记录...居然成了死循环。又得放弃了。

  不过总得有个方案检测程序的内存泄漏啊。malloc_hook、mtrace、valgrind得选一个了。感觉malloc_hook有点类似重写operator new,不想用。mtrace每次要生成文件记录,不方便经常调试。也只有valgrind一个选择了。之前不用valgrind是因为自己代码用的库比较多,libev、boost、STL...,其中libev文档指明valgrind对它的检测结果有误,所以开始不用。不过现在也无所谓了,知道有这么回事就好。

  Qt creator和valgrind是分开的,确保已安装valgrind,没安装的请sudo apt-get install valgrind。

  故意写了内存泄漏的代码“char *pttt = new char[1024];”:

  点击Qt creator 中的分析菜单,选中Valgrind Memory Analyzer

Qt creator 会调用valgrind自动分析中,如果程序比较大,可能会很慢

  可见valgrind可以将基本的内存泄漏分析出来。但是,工具检测只是提供了参考,对于复杂的程序,尤其是使用了内存池的程序。重要的还是自己写代码时注意。

时间: 2024-10-12 19:54:35

Qt creator 搭配 valgrind 检测内存泄漏的相关文章

Linux/Unix用valgrind检测内存泄漏

c\c++编程中,内存管理是比较头疼的问题,一不小心就会造成内存泄漏,除了养成良好的编程习惯外(使用智能指针等),使用工具也能帮助检测内存泄漏,valgrind是Unix\Linux下一款不错的工具.(mac下暂时有bug) Valgrind 安装 到www.valgrind.org下载最新版valgrind-3.2.3.tar.bz2 解压安装包:tar –jxvf valgrind-3.2.3.tar.bz2 解压后生成目录valgrind-3.2.3 cd valgrind-3.2.3 运

linux实用技巧:检测内存泄漏工具Valgrind

1.Valgrind简介 1.在我们编写C/C++的时候,最常见的错误之一就是内存泄露,这样的问题其实跟程序员的编程习惯密不可分.如果你在申请内存空间之后能够马上在合适的位置释放内存.会极大程度的避免内存泄漏的情况.但是人非圣贤,孰能无过.有时候我们确实忘记释放内存而导致了比较严重的错误,所以这个时候我们需要借助valgrind这个工具来判断内存泄漏. Valgrind 是一款 Linux下(支持 x86.x86_64和ppc32)程序的内存调试工具,它可以对编译后的二进制程序进行内存使用监测(

如何在linux下检测内存泄漏(转)

本文转自:http://www.ibm.com/developerworks/cn/linux/l-mleak/ 本文针对 linux 下的 C++ 程序的内存泄漏的检测方法及其实现进行探讨.其中包括 C++ 中的 new 和 delete 的基本原理,内存检测子系统的实现原理和具体方法,以及内存泄漏检测的高级话题.作为内存检测子系统实现的一部分,提供了一个具有更好的使用特性的互斥体(Mutex)类. 1.开发背景 在 windows 下使用 VC 编程时,我们通常需要 DEBUG 模式下运行程

xcode里面使用Memory Leaks和Instruments检测内存泄漏

教程截图: Leaks和Instruments教程[检测内存泄露]" src="http://pic002.cnblogs.com/images/2011/283130/2011080816513182.jpg"> 作为一名无证程序员,无论你多么精通Objective-C的内存管理,随着时间的推移,你也不可避免的犯内存相关的错误.但通常因为代码量太大,以至于你不可能一行一行的去排除(等你解决完,你设计的动车早相撞了!) 幸运的是,苹果已经提供了一些好的方式来帮助你找到应

VS中检测内存泄漏的方法

vs中检测内存泄漏的方法 分类: MFC2013-03-08 21:44 2764人阅读 评论(0) 收藏 举报 使用vs的内存检测有以下几种方法. 在debug模式下以F5运行: 方法一: [html] view plaincopy #define CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h> //在入口函数中包含 _CrtDumpMemoryLeaks(); //即可检测到内存泄露 //以如下测试函数为例: i

Android实战——LeakCanary检测内存泄漏

本篇文章包括以下内容: 前言 内存泄漏的简介 内存溢出的简介 LeakCanary的配置与使用 结语 内存泄漏对于初学者们可能是一个陌生的词语,但是却频频发生于自己的软件上,只不过自己不知道而已.同理,内存溢出也是一个道理.而内存泄漏和内存溢出常常是面试的考题,所以早点掌握是必不可少的 内存泄漏是指:对象在它有限的生命周期结束时,它们将被垃圾回收,如果在回收时,这个对象还被一系列的引用,导致该对象不会被回收,那么就会导致内存泄漏.随着泄漏的累积,应用将消耗完内存,应用的流畅性就会大大减弱 常见的

QT VS检测内存泄漏

测试程序:http://download.csdn.net/detail/ajaxhe/4085447 vld-2.2.3: http://vld.codeplex.com/releases/view/82311 方法一: 参考链接1: http://blog.csdn.net/dizuo/article/details/6030676 参考链接2: http://www.schmidt-web-berlin.de/winfig/blog/?p=154 参考链接1和参考链接2说的是一个东西,不使

valgrind查找内存泄漏问题

程序运行一晚上,早晨一看,出现了Killed信息,然后在网上查找一下,说应该是程序占用资源过高,被系统终止了. 然后我又运行一段时间,看内存果然涨到了使用率40%多,然后就开始查找内存泄漏的问题,由于程序本来就不大,我手动 在代码中找new和malloc,然后又找delete和free,找到了两处,然后修正了. 但是运行一段时间还是在涨,虽然涨的慢了,但是还是有问题,于是就想到了用valgrind.\ 第一次使用的时候是用的 valgrind + 程序,这样运行的,但是发现信息好像太少了,于是改

重载operator new实现检测内存泄漏是否可行

行与不行,就凭我这水平,说出来未免显示太过自大.不还,我还想根据自己的代码来讨论这个问题. 重载operator new来检测内存只的办法,那就是在new的时候记录指针地址及文件名.行号,在delete的时候取消记录.到最后程序结束,还有哪些指针未释放,则为泄漏. 第一步,你得重载operator new,或者也可以重写.在http://www.cplusplus.com/reference/new/operator%20new/中指明new有三种形式,因为我们还分配数组,故还有new[]这个函