代码可能存在内存泄露怎么办?

使用valgrind可以对代码进行内存泄露检测。

valgrind下载安装

下载:

https://www.valgrind.org/downloads/

forum.jpg


安装:

1、tar–jxvfvalgrind-3.21.0.tar.bz22、cdvalgrind-3.21.03、./configure--prefix=/home/book/valgrind-3.21.0/install4、make5、makeinstall

--prefix为指定安装路径,可以不指定,使用默认的,即执行./configure

内存泄露测试

测试程序test.c:

分配40个字节的buffer,越界访问buf[10].

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<unistd.h>
  4. voidtest(){
  5. int*buf = (int*)malloc(10*sizeof(int));
  6.         buf[10] =0x55;
  7. }
  8. intmain(){
  9. test();
  10. return0;
  11. }

编译:

gcc -g -otesttest.c

编译时注意加上-g选项

使用valgrinid测试:

./valgrind --leak-check=yes ./test

forum.jpg


结果显示,产生错误的地方在test.c的15行main函数中,即调用test()函数。具体的在test.c的第9行,test函数内,即buf[10] = 0x55;语句。

根据提示信息,可知valgrind检测到了2个错误:

存在无效的写入数据,即数组越界访问

内存泄露,分配了40字节没有释放