使用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();//停止跟踪
}


相关文章
|
2月前
|
缓存 监控 Python
在Python中,如何检测和处理内存泄漏?
【2月更文挑战第7天】【2月更文挑战第18篇】在Python中,如何检测和处理内存泄漏?
|
3月前
|
安全 Linux 编译器
内存泄漏检测组件的分析与实现(linux c)-mtrace工具使用
内存泄漏产生原因 在堆上使用malloc/remalloc/calloc分配了内存空间,但是没有使用free释放对应的空间。
76 0
|
3月前
|
Java C++
动手实现内存泄漏检测组件
动手实现内存泄漏检测组件
37 1
|
3月前
|
调度 C语言
内存泄漏检测相关内容
内存泄漏检测相关内容
25 0
|
1月前
|
IDE Linux 开发工具
内存泄漏检测工具Valgrind:C++代码问题检测的利器(一)
内存泄漏检测工具Valgrind:C++代码问题检测的利器
91 0
|
1月前
|
缓存 Linux iOS开发
【C/C++ 集成内存调试、内存泄漏检测和性能分析的工具 Valgrind 】Linux 下 Valgrind 工具的全面使用指南
【C/C++ 集成内存调试、内存泄漏检测和性能分析的工具 Valgrind 】Linux 下 Valgrind 工具的全面使用指南
66 1
|
1月前
|
缓存 测试技术 开发工具
内存泄漏检测工具Valgrind:C++代码问题检测的利器(二)
内存泄漏检测工具Valgrind:C++代码问题检测的利器
35 0
|
1月前
|
Python
在Python中,如何检测和修复内存泄漏?
在Python中,如何检测和修复内存泄漏?
104 0
|
3月前
|
Web App开发 前端开发 JavaScript
JavaScript 内存泄漏的检测与防范:让你的程序更稳定
JavaScript 内存泄漏的检测与防范:让你的程序更稳定
JavaScript 内存泄漏的检测与防范:让你的程序更稳定
|
3月前
|
缓存 算法 Linux
Linux 内存泄漏检测的基本原理
Linux 内存泄漏检测的基本原理
112 0