智能检查linux c/c++代码是否有内存泄漏

检查内存泄漏

​ 最令Linux程序员头疼的莫过于内存泄露了,即使你是在优秀的程序员,你也不能保证所以的malloc操作都有对应的free,那必要的工具就是必不可少的了。在一般的Linux发行版中,有一个自带的工具可以很方便的替你完成这些事,这个工具就是mtrace。

源代码test.c:

#include <stdio.h>  
#include <mcheck.h>  
int main()
{  
    setenv("MALLOC_TRACE", "output", 1);  
    mtrace();  
    char * text = ( char * ) malloc (sizeof(char) * 100);    
    return 0;  
}  
  • 可以看出,只需要在你的程序中插入三行代码,就行

第一句,#include <mcheck.h>,包含头文件

第二句,setenv("MALLOC_TRACE", "output", 1); 设置一个环境变量 MALLOC_TRACE=output

第三句,mtrace(),调用mtrace.
  • 将这个文件编译,注意,编译的时候一地要加上gcc的-g选项。

gcc test.c -g -o test
  • 接着执行可执行文件,然后你会发现当前目录下多了一个output的文件。

./test

  • 这个文件自然不是文本文件,所以需要工具来查看。

where@ubuntu:~/workspace$ mtrace test output 
- 0x000000000090c010 Free 3 was never alloc'd 0x7f642f397e8d
- 0x000000000090c270 Free 4 was never alloc'd 0x7f642f46205f
- 0x000000000090c290 Free 5 was never alloc'd 0x7f642f4d1a6c

Memory not freed:
-----------------
           Address     Size     Caller
0x000000000090c700     0x64  at /home/where/workspace/test.c:8

​ Memory not freed:代表内存未被释放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值