C语言中一个malloc调用与一个free调用对应出现。
当项目足够大的时候,我们就很容易忘记free内存,或者重复free内存。
在一般Linux发行版中,有一些自带的内存检查工具可以帮助我们去检查对手动分配的内存的free情况,其中的一个工具就是mtrace。
使用mtrace之前需要在C源码中使用GNU C函数mtrace追踪记录内存的分配释放情况。
mtrace()包含在头文件mcheck.h中,与之配对的函数是muntrace(),函数原型分别为:
#include <mcheck.h>
void mtrace(void);
void muntrace(void);
调用mtrace追踪前需要设置环境变量MALLOC_TRACE,可以使用export命令也可以使用setenv函数:
export: export MALLOC_TRACE="<LogName>"
或者:
setenv: assert(!setevn("MALLOC_TRACE", "<LogName>", 1));
其中<LogName>是log文件名,用来保存mtrace生成的追踪记录。
事例中将使用export命令方法。
使用mtrace追踪内存申请与释放的流程:([]表示可选项,可有可无)
1:export MALLOC_TRACE="<LogName>"
2:在C源码中加入mtrace();
3:gcc -g <SourceFile> [-o DestinationBin]
4:执行程序
5:mtrace [DestinationBin] <LogName>
事例:
1&