免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1908 | 回复: 1

[C] 检测内存泄露 [复制链接]

论坛徽章:
0
发表于 2016-11-26 16:45 |显示全部楼层
本帖最后由 寻蝉林子 于 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



效果图

效果图

统计结果

 统计结果

论坛徽章:
0
发表于 2016-11-28 13:17 |显示全部楼层
使用valgrind,很方便。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP