最令Linux程序员头疼的莫过于内存泄露了,即使你是在优秀的程序员,你也不能保证所以的malloc操作都有对应的free,那必要的工具就是必不可少的了。在一般的Linux发行版中,有一个自带的工具可以很方便的替你完成这些事,这个工具就是mtrace。
源代码test.c:
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:代表内存未被释放。