内存检测Valgrind
1.内存检测Valgrind
目的:避免事后出现问题,在事前加入防御机制
Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,作者是获得过Google-O’Reilly开源大奖的Julian Seward,它包含一个内核──一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务──调试,分析,或测试等,内存检测,我们可以使用它的工具:Memcheck。
2.安装
Ubuntu : sudo apt-get install valgrind
3.Memcheck检测范围
用来检测c/c++程序中出现的内存问题,所有对内存的读写都会被检测到,一切对malloc()/free()/new/delete的调用都会被捕获。所以,它能检测以下问题:
-
对未初始化内存的使用;
-
读/写释放后的内存块;
-
读/写超出malloc等分配的动态内存范围;
-
读/写不适当的栈中内存块;
-
内存泄漏,指向一块内存的指针永远丢失;
-
不正确的malloc/free或new/delete匹配;
-
memcpy()相关函数中的dst和src指针重叠问题。
4.Memcheck 检查步骤及注意事项
-
在编译程序的时候打开调试模式(gcc编译器的-g选项),以便显示行号,编译时去掉-O1 -O2等优化选项;检查的是C++程序的时候,考虑加上选项: -fno-inline ,这样它函数调用链会很清晰
-
执行:valgrind --tool=memcheck --leak-check=full --log-file=./log.txt ./YourProgram
-
程序运行结束,查看 log.txt 中的结果。
eg:举一个内存泄漏的问题
hello3.c
#include <stdio.h>
void f(void)
{
int* x = malloc(10 *