内存检测工具valgrind
来源:互联网 发布:java 中接口interface 编辑:程序博客网 时间:2024/06/05 17:04
最近在学习数据结构的时候总是遇到关于内存错误的问题,因为数据结构这块多用指针,由此产生的段错误多不胜数,因此学习了一下valgrind这个工具,来检测我们的程序是如何出现内存问题的。
centos系统下的valgrind,首先我们得有autoconf和automake两个工具,一般系统都会自配。
安装过程:
wget http://valgrind.org/downloads/valgrind-3.10.1.tar.bz2tar -jxvf valgrind-3.10.1.tar.bz2cd valgrind-3.10.1./autogen.sh (这一步可能遇上没有安装上面两个工具的错误提示)./configuresudo make && make installvalgrind --version (检测版本,看是否安装成功)
到此,我们的工具安装成功。
我们在编译程序的时候加上-g -fno-inline 保留调试信息。
下面是检测命令:
$ valgrind --tool=memcheck --log-file=/home/trunk/valgrind_log_all --leak-check=full --error-limit=no --show-leak-kinds=all ./a.out
其中–leak-check=full 指的是完全检查内存泄漏,–show-reachable=yes是显示内存泄漏的地点,–trace-children=yes是跟入子进程,–track-origins=yes查看哪里没有进行初始化。当程序正常退出的时候valgrind自然会输出内存泄漏的信息。log是存放详细信息的日志文件,我们将其显示在终端可不要
下面用几个小程序来试一下我们的工具:
#include <stdio.h>void function(){ int *p = (int*)malloc(10*sizeof(int)); p[10] = 0;}int main(){ function(); return 0;}
上面的程序很明显没有free而造成内存泄漏,内存泄露(Memory leak)指的是,在程序中动态申请的内存,在使用完后既没有释放,又无法被程序的其他部分访问。内存泄露是在开发大型程序中最令人头疼的问题,以至于有 人说,内存泄露是无法避免的。其实不然,防止内存泄露要从良好的编程习惯做起,另外,有工具帮助我们检测更好!
这是结果:
#include <stdio.h>int main(){ int a; if (a==1) { printf("a==%d\n",a); return 0; }}
结果:
#include <stdio.h>int main(){ int *a = (int*)malloc(5*sizeof(int)); a[5] = 1; return 0;}
很明显的数组越界
在我们写代码的时候,注意我们的编程规范,才能写出完美的代码。
参考链接:http://www.open-open.com/lib/view/open1409296596322.html
阅读全文
2 0
- valgrind内存检测工具
- valgrind ---- 内存检测工具
- 内存检测工具Valgrind
- 内存检测工具 Valgrind
- 内存泄露检测工具 - Valgrind
- 内存泄露检测工具--valgrind
- valgrind内存检测工具
- 内存泄露检测工具 - Valgrind
- valgrind内存检测工具
- 内存泄露检测工具valgrind
- Valgrind 内存检测工具
- valgrind 内存检测工具用法
- valgrind内存检测工具
- 内存检测工具valgrind
- linux内存泄漏检测工具valgrind
- linux 内存泄露检测工具valgrind
- 内存泄漏检测工具Valgrind学习
- valgrind 内存泄漏检测工具使用
- 二叉树的静态实现
- Linux 命令全称
- python序列化
- HDFS snapshot操作实战
- PAT basic 1031
- 内存检测工具valgrind
- PAT basic 1032
- 利用opencv实现人脸检测(C++版)
- 基于jwt的token验证
- 基础部分
- PAT basic 1033
- PAT basic 1034
- 2017-08-07 NOIP模拟赛
- Collectioni List 集合