- 安装:sudo yum install valgrind
2.用法:
valgrind参数 可执行程序 可执行程序的参数…
valgrind参数:
–leak-check=full 指的是完全检查内存泄漏
–show-reachable=yes是显示内存泄漏的地点
–trace-children=yes是跟入子进程
–log-file=filename 分析日志输出文件(valgrind没法使用输出重定向把结果输出到文件)
–track-origins=yes 查看未初始化值的来源
2.分析:
在valgrind打印的分析结构查找是否有 Memcheck, a memory error detector
若有,则说明程序执行过程中内存错误了,然后查看报错的堆栈,就可以定位到具体错误操作所在的地方了
示例1-内存越界:
【Invalid write of size 8】这行表示下面的写操作,超过了8个字节。
然后在代码里查看memset函数,发现memset函数写了512个字节。
示例2-使用了未初始化的变量
然后查看堆栈(NobelSoulCharEncode.cpp:675)
看到变量是传进来的,顺着堆栈一层一层找,最后发现NobelPrizeTxtBase.cpp:143用的pBuffer在MallocBuffer没有初始化
进行初始化之后,该错误消失