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服务器下有如下程序:

Linux下使用valgrind工具集检测内存泄漏

通过g++命令生成一个a.out可执行文件,现在通过valgrind来检测内存释放问题:

Linux下使用valgrind工具集检测内存泄漏

命令行参数传入为1会释放内存所以没有内存泄漏的问题。

Linux下使用valgrind工具集检测内存泄漏

命令行参数为0不会释放堆区空间。