Linux下检测内存泄漏工具Valgrind
2016-04-11 12:27
615 查看
1.Valgrind简介
1.在我们编写C/C++的时候,最常见的错误之一就是内存泄露,这样的问题其实跟程序员的编程习惯密不可分。如果你在申请内存空间之后能够马上在合适的位置释放内存。会极大程度的避免内存泄漏的情况。但是人非圣贤,孰能无过。有时候我们确实忘记释放内存而导致了比较严重的错误,所以这个时候我们需要借助valgrind这个工具来判断内存泄漏。
Valgrind 是一款 Linux下(支持 x86、x86_64和ppc32)程序的内存调试工具,它可以对编译后的二进制程序进行内存使用监测(C语言中的malloc和free,以及C++中的new和delete),找出内存泄漏问题。
Valgrind 中包含的 Memcheck 工具可以检查以下的程序错误:
使用未初始化的内存 (Use of uninitialised memory)
使用已经释放了的内存 (Reading/writing memory after it has been free’d)
使用超过malloc分配的内存空间(Reading/writing off the end of malloc’d blocks)
对堆栈的非法访问 (Reading/writing inappropriate areas on the stack)
申请的空间是否有释放 (Memory leaks – where pointers to malloc’d blocks are lost forever)
malloc/free/new/delete申请和释放内存的匹配(Mismatched use of malloc/new/new [] vs free/delete/delete [])
src和dst的重叠(Overlapping src and dst pointers in memcpy() and related functions)
重复free
Linux下Valgrind的使用概述 http://www.linuxidc.com/Linux/2012-08/67990.htm
Linux下利用Valgrind工具进行内存泄露检测和性能分析 http://www.linuxidc.com/Linux/2012-06/63754.htm
Ubuntu 内存泄漏检测工具Valgrind的安装
http://www.linuxidc.com/Linux/2011-12/49988.htm
Valgrind--Linux下的内存调试和代码解剖工具 http://www.linuxidc.com/Linux/2011-06/36907.htm
应用 Valgrind 发现 Linux 程序的内存问题[图文] http://www.linuxidc.com/Linux/2008-11/17502.htm
2.valgrind的使用实例:
1.在官网上找到valgrind的tar包:
解压,编译。完成后make安装:
编译到制定位置:
安装valgrind:
完成之后我们就可以对系统中的程序进行检测了,首先我们用ls显示根目录下的文件,ls命令是没有内存泄漏的:
更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2014-09/106299p2.htm
为了体现valgrind 的检错功能,我们故意编写一个只malloc没有free的C程序:
编译链接后使用valgrind进行检测,发现有内存泄漏:
然后我们在C程序中释放内存:
再次编译链接完成后使用valgrind检测:
这次则显示我们申请并且释放了400B的空间,体现了valgrind的强大作用。
3.小结
有这样的检错工具当然很好,但是我更认为程序员应该始终头脑清醒,知道自己的程序在做什么,记得这个忠告,如果你的语言没有垃圾回收机制。那么在申请一块内存之后先不要做任何操作,先在合适的位置释放内存。毕竟好借好还,再借不难么。^_^
本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-09/106299.htm
1.在我们编写C/C++的时候,最常见的错误之一就是内存泄露,这样的问题其实跟程序员的编程习惯密不可分。如果你在申请内存空间之后能够马上在合适的位置释放内存。会极大程度的避免内存泄漏的情况。但是人非圣贤,孰能无过。有时候我们确实忘记释放内存而导致了比较严重的错误,所以这个时候我们需要借助valgrind这个工具来判断内存泄漏。
Valgrind 是一款 Linux下(支持 x86、x86_64和ppc32)程序的内存调试工具,它可以对编译后的二进制程序进行内存使用监测(C语言中的malloc和free,以及C++中的new和delete),找出内存泄漏问题。
Valgrind 中包含的 Memcheck 工具可以检查以下的程序错误:
使用未初始化的内存 (Use of uninitialised memory)
使用已经释放了的内存 (Reading/writing memory after it has been free’d)
使用超过malloc分配的内存空间(Reading/writing off the end of malloc’d blocks)
对堆栈的非法访问 (Reading/writing inappropriate areas on the stack)
申请的空间是否有释放 (Memory leaks – where pointers to malloc’d blocks are lost forever)
malloc/free/new/delete申请和释放内存的匹配(Mismatched use of malloc/new/new [] vs free/delete/delete [])
src和dst的重叠(Overlapping src and dst pointers in memcpy() and related functions)
重复free
Linux下Valgrind的使用概述 http://www.linuxidc.com/Linux/2012-08/67990.htm
Linux下利用Valgrind工具进行内存泄露检测和性能分析 http://www.linuxidc.com/Linux/2012-06/63754.htm
Ubuntu 内存泄漏检测工具Valgrind的安装
http://www.linuxidc.com/Linux/2011-12/49988.htm
Valgrind--Linux下的内存调试和代码解剖工具 http://www.linuxidc.com/Linux/2011-06/36907.htm
应用 Valgrind 发现 Linux 程序的内存问题[图文] http://www.linuxidc.com/Linux/2008-11/17502.htm
2.valgrind的使用实例:
1.在官网上找到valgrind的tar包:
解压,编译。完成后make安装:
编译到制定位置:
安装valgrind:
完成之后我们就可以对系统中的程序进行检测了,首先我们用ls显示根目录下的文件,ls命令是没有内存泄漏的:
更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2014-09/106299p2.htm
为了体现valgrind 的检错功能,我们故意编写一个只malloc没有free的C程序:
编译链接后使用valgrind进行检测,发现有内存泄漏:
然后我们在C程序中释放内存:
再次编译链接完成后使用valgrind检测:
这次则显示我们申请并且释放了400B的空间,体现了valgrind的强大作用。
3.小结
有这样的检错工具当然很好,但是我更认为程序员应该始终头脑清醒,知道自己的程序在做什么,记得这个忠告,如果你的语言没有垃圾回收机制。那么在申请一块内存之后先不要做任何操作,先在合适的位置释放内存。毕竟好借好还,再借不难么。^_^
本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-09/106299.htm
相关文章推荐
- linux 内存泄漏检查工具
- 深入解析Linux系统中的SELinux访问控制功能
- 在linux下用不了ifconfig的问题
- CentOS 6 安装Hadoop 2.6 (二)配置Hadoop
- Linux有用但不常用的命令
- Linux下Hadoop2.6.0集群环境的搭建
- Linux script命令 —— 终端里的记录器
- Linux的启动级别
- linux启动关闭svn
- Linux中对文本去重的处理命令
- Linux内核的配置与编译(X86平台)
- Centos 7安装 redmine 3.X
- Linux下面的yum命令详解
- linux 常用命令积累
- Linux中gpasswd命令的使用方法
- Linux下C++调用Java简单实例(jni)
- Linux 更改SSH端口
- linux磁盘分区知识
- linux下文件夹的创建、复制、剪切、重命名、清空和删除命令
- SELinux政策实施详解