检测内存泄露
本帖最后由 寻蝉林子 于 2017-12-16 23:07 编辑问题:如何检测malloc申请的内存是否完全释放?
解决方法:eg:
#include <stdlib.h>
#include <mcheck.h>
int main()
{
char *a, *b;
setenv("MALLOC_TRACE", "output.log", 1);
mtrace();
a=(char *)malloc(4*sizeof(int));
b=(char *)malloc(2*sizeof(int));
muntrace();
free(a);
free(b);
}
注释:
1.setenv设置环境变量,output.log是保存结果的文件名;
2.mtrace()记录malloc申请的内存首地址以及内存的大小;
3.muntrace()记录free释放的内存首地址;
4.内存空间的大小是16进制;
5.为便于观察没释放,可以把其中一个或多个free()注释,再编译运行;
为便于统计结果:
在output.log文件中;
mtrace()把检测到malloc申请内存的地址前面有有 “+”
muntrace()把检测到free()释放的内存地址前面有 “-”
因此只需要统计 “+”, “-”的行数是否相等即可;
统计脚本:
#!/bin/bash
awk 'BEGIN{FS=" "} {for(i=1; i<=NF; i++)a[$i]++} END { for(i in a){if(i=="+")print i"="a;if(i=="-")print i"="a;}}' $1
使用valgrind,很方便。
页:
[1]