Linux下使用valgrind工具集检测内存泄漏
内存泄漏的检查工具
Valgrind:帮助程序员寻找程序里的bug和改进程序性能的工具集。擅长是发现内存的管理问题;里边有若干工具,其中最重要的是Memcheck(内存检查)工具,用于检查内存的泄漏;
1. memcheck的基本功能,能发现如下的问题;
a)使用未初始化的内存
b)使用已经释放了的内存
c)使用超过malloc()分配的内存
d)对堆栈的非法访问
e)申请的内存是否有释放
f)malloc/free,new/delete申请和释放内存的匹配
g)memcpy()内存拷贝函数中源指针和目标指针重叠;
2. 内存泄漏检查示范
格式:valgrind --tool=memcheck 其它工具 可执行文件
--tool=memcheck :使用valgrind工具集中的memcheck工具
--leak-check=full : 指的是完全full检查内存泄漏
--show-reachable=yes :是显示内存泄漏的地点
--trace-children = yes :是否跟入子进程
--log-file=log.txt:讲调试信息输出到log.txt,不输出到屏幕
最终用的命令:
valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./a.out
具体操作如下:现在我的远程Linux服务器下有如下程序:
通过g++命令生成一个a.out可执行文件,现在通过valgrind来检测内存释放问题:
命令行参数传入为1会释放内存所以没有内存泄漏的问题。
命令行参数为0不会释放堆区空间。