linux环境下的内存泄漏检查
来源:互联网 发布:c语言打爱心 编辑:程序博客网 时间:2024/05/23 09:46
Linux下的mtrace工具可以帮助我们检查程序中是否有内存泄漏。GNU扩展函数mtrace会为内存分配函数(malloc, realloc, memalign, free等)注册hook,记录malloc/free信息。
使用时也非常简单,只需在代码中调用mtrace函数即可。这需要包含头文件mcheck.h。同时需要设置环境变量MALLOC_TRACE,指定信息输出到哪个文件。如果MALLOC_TRACE没有设置,或者设置的文件不可用或者不可写,那么将不会安装hook函数,mtrace不生效。
之后编译执行,会生成内存信息文件,利用mtrace工具即可查看,格式为mtrace ./bin out_file。如果有内存泄漏,会出现Memory not freed部分。编译时如果有-g选项则会在caller处显示代码信息,说明该处的malloc没有对应的free。
mtrace的原理是记录每一对malloc-free的执行,若每一个malloc都有相应的free,则代表没有内存泄露,对于任何非malloc/free情況下所发生的内存泄露问题,mtrace并不能找出来。也就是对于new的内存,只能检测出有泄露,但不能定位。
代码示例如下:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <mcheck.h>int main(){ setenv("MALLOC_TRACE", "output", 1); mtrace(); char *text = (char *)malloc(sizeof(char) * 100); // free(text); return 0;}
valgrind中 memcheck工具可以探测程序中内存的使用情况,它检查所有对内存的读写,并截取所有malloc/free 、new/delete调用。因此memcheck可以检查如下问题:
1.使用未初始化的内存;
2.读写已经被释放的内存;
3.读写内存越界;
4.读写不恰当的内存栈空间;
5.内存泄漏;
6.malloc/new/new[]与free/delete/delete[]不匹配。
检查内存泄漏,执行valgrind --tool=memcheck --leak-check=full ./bin
- linux环境下的内存泄漏检查
- VC环境下检查内存泄漏memory leak的方法
- VC环境下检查内存泄漏memory leak的方法
- VC环境下检查内存泄漏memory leak的方法
- 关于Linux系统下内存泄漏的检查方法
- Linux下检查内存泄漏、系统性能的系列工具
- 关于Linux操作系统下内存泄漏的检查方法
- linux下c检查内存泄漏的简单方法
- linux内存泄漏检查工具
- linux内存泄漏检查工具
- linux 内存泄漏检查工具
- linux下用valgrind检查程序内存泄漏
- linux下用valgrind检查程序内存泄漏
- linux下的内存检查
- 检查内存泄漏的工具
- 检查内存泄漏的工具
- VS的内存泄漏检查
- 内存泄漏检查的常识
- 【LeetCode】414. Third Maximum Number
- 0301CSS学习
- 【HDU6017】Girls Love 233 (DP)
- [转]PAT甲级练习1100. Mars Numbers (20)
- 重建二叉树
- linux环境下的内存泄漏检查
- Android上的Badge,给应用添加角标
- 7. Reverse Integer
- 4.3【图像镜像】-------------基于Opencv实现-----图像的镜像变换
- JDK的下载与安装
- spring 中 @value 注解的使用
- 【bzoj1862】[ZJOI2006]GameZ游戏排名系统
- #单片机# ------ Keil uVision2 和 stc-isp 的使用(图文教程)
- 项目管理 STLvector