ubuntu安装valgrind,并进行简单程序的检查内存泄漏
菜鸡模仿之路总是不那么顺利
1。首先官网http://valgrind.org/下载valgrind,解压
2。进入目录后 ./autogen.sh 好吧,我的电脑在这里就报错了
- Can't exec "aclocal": No such file or directory at /usr/share/autoconf/Autom4te/FileUtils.pm line 326.
- autoreconf: failed to run aclocal: No such file or director
3。百度要装一个sudo apt-get install automake
4。然后.配置Valgrind,生成MakeFile文件 ,教程是这么写的./configure --prefix=/usr/local 这里我并没有指定文件位置,就安在的当前目录下,若要指定在usr/local下还是要加sudo的
5。然后编译make && make install 这里建议还是加上sudo的,而且最好还是编译和安装分开执行
sudo make -j8
sudo make install -j8
这里还是加一下-j8吧,不然太慢了,加了还是有点慢
6.然后一开始由于制定了生成makefile文件的位置,导致因为没有权限编译了一遍,建议重新编译安装的时候还是sudo make clean一下恩
7。安装成功了,然后来验证一下,菜鸡采用官网快速开始的例子
8。在本地复制了quick start的一个了leak.c的代码
#include <stdlib.h> void f(void) { int* x = malloc(10 * sizeof(int)); x[10] = 0; // problem 1: heap block overrun } // problem 2: memory leak -- x not freed int main(void) { f(); return 0; }
9。然后gcc -o leak leak.c gcc -o用来编译生成二进制文件
然后可以运行一下 ./leak
10。然后使用valgrind进行检测一下是否有内存泄露
valgrind --leak-check=yes ./leak
使用方式:
If you normally run your program like this:
myprog arg1 arg2
Use this command line:
valgrind --leak-check=yes myprog arg1 arg2
就酱紫
最后成功图:
这个代码共有两个内存泄露的地方一个malloc,另一个数组越界。