linux 提供 mtrace/muntrace
来检测程序是否有内存泄露
。一般来说要检测哪一段代码是否有内存泄露,就可以用这一对函数包起来。
需要添加的头文件:
#include <mcheck.h>#include <stdlib.h>
使用示例:
char *fun()
{
return (char *)malloc(10000000);
}
int main()
{
setenv("MALLOC_TRACE", "output", 1);
mtrace();
while(1)
{
fun();
sleep(1);
}
muntrace();
return 0;
}
其中很明显 fun()
这个函数的错误用法会导致程序出现内存泄漏,那么就可以使用这个方法来检测内存释放泄漏,其中 setenv(“MALLOC_TRACE”,”output”,1)
这条程序的意思是在本目录上产生一个 output
的
log
文件用来保存内存检测的内容,
mtrace表示开始检测,muntrace
表示结束检测。那么运行程序后,将会在
output
文件中显示检测的内容。
![](https://i-blog.csdnimg.cn/blog_migrate/1e68350cd7841806c4e8b13756b149c5.png)
如图,+号表示系统正在分配内存,-表示释放内存,但从文件中得知程序一直在申请内存,却没有释放内存,由此可以知道存在内存泄漏。
当然,setenv(“MALLOC_TRACE”,”output”,1)
这条语句不写也没关系,那就要使用 export
命令来配置环境了,例如,在执行程序前使用
export MALLOC_TRACE=./log,那么将在本级目录生成一个名为
log
的文件用来保存检测信息。