0
点赞
收藏
分享

微信扫一扫

使用mtrace进行内存泄漏检测

使用mtrace进行内存泄漏检测

一、使用mtrace

要加入头文件

#include <mcheck.h>

通过mtrace()muntrace()放在要测试的代码的前后

mtrace();

void *p1 = malloc(10);
void *p2 = malloc(20); //calloc, realloc

free(p1);

void *p3 = malloc(20);
void *p4 = malloc(20);

free(p2);
free(p4);

muntrace();

进行编译(一定要加-g,否则最后没法看出行号)

gcc -o memleak memleak.c -g

定义一个环境变量,表示内存泄漏的日志存放的位置

export MALLOC_TRACE=./test.log

执行,输出test.log

./memleak

查看test.log
在这里插入图片描述
由于里面同时记录了malloc和free,因此把内存地址相同的给删除,剩下的就是内存泄漏的
在这里插入图片描述
可以看到 此时代码段地址为0x400a41
通过addr2line命令,查看是242行,位于memleak.c文件main函数中
在这里插入图片描述
确实p3没有释放,存在内存泄漏
在这里插入图片描述

二、完整代码

#include<stdlib.h>
#include<mcheck.h>



int main(){
    mtrace();//跟踪

	void *p1 = malloc(10);
	void *p2 = malloc(20); 
	free(p1);
	void *p3 = malloc(20);//内存泄漏
	void *p4 = malloc(20);
	free(p2);
	free(p4);

	muntrace();//停止跟踪
}
举报

相关推荐

0 条评论