美文网首页Linux 内存管理我用 Linux
Valgrind--Linux下检测内存泄漏

Valgrind--Linux下检测内存泄漏

作者: 爱秋刀鱼的猫 | 来源:发表于2018-03-10 17:01 被阅读16次

    由于C和C++程序中常常需要程序员自主申请和释放内存,在大型的、复杂的应用程序中就会常常出现内存错误。Valgrind是linux环境下的一款功能齐全的内存调试和性能分析工具集,它包括MemcheckCallgrindCachegrindHelgrindMassif等工具。

    本文分为三个部分:valgrind工具的下载与安装、实例解析、常用选项说明。通过这三部分的学习,读者可以基本掌握valgrind工具的内存调试方法。

    1. 下载与安装
    sudo apt install valgrind
    
    2. 实例解析
    #include<stdlib.h>
    #include<iostream>
    using namespace std;
    void GetMemory(char*p,int num)
    {
        p=(char*)malloc(sizeof(char)*num);//  申请了内存但是没有释放
    }
    
    int main(int argc,char**argv)
    {
    char*str=NULL;
    GetMemory(str,100);
    cout<<"Memory leak test!"<<endl;
    return 0;
    }
    
    编译上述代码,得到可执行文件test。使用Valgrind允许可执行文件如下图所示: 可以看到结果如下: 内存泄漏检测 分析结果:
    //11950 为进程ID
    ==11950== 100 bytes in 1 blocks are definitely lost in loss record 1 of 2
    ==11950==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==11950==    by 0x4008B1: GetMemory(char*, int) (in /home/zz/code/test)
    ==11950==    by 0x4008E0: main (in /home/zz/code/test)
    

    上面的结果告诉我们是在main中调用了GetMemory导致的内存泄漏,GetMemory中是调用了malloc导致泄漏了100字节的内存。

    3. Valgrind工具选项说明

    valgrind 命令的基本格式为:valgrind [base option] --tool=<tool name> [tool option] your-program [program options]

    本文仅列出了一些常用的选项,更详细的选项说明可参考valgrind home网站上的相关章节(http://www.valgrind.org/)。

    a) Valgrind基本选项及其说明
    --tool:指定使用的具体工具,可以为Memcheck、Callgrind、Cachegrind、Helgrind、Massif等工具;
    b) Memcheck相关选项及其说明
    --leak-check=<no|summary|yes|full> [default: summary]:no表示不检测,summary只显示统计信息,yes和full显示详细信息,即上述四种泄露的详细信息。

    相关文章

      网友评论

        本文标题:Valgrind--Linux下检测内存泄漏

        本文链接:https://www.haomeiwen.com/subject/xklbfftx.html