valgrind內存泄露檢測工具

1、安裝 valgrind
linux環境首先進入root用戶
而後執行下面的命令
tar -jxvf valgrind-3.12.0.tar.bz2
cd valgrind-3.12.0
./configure
make
make installlinux

valgrind --version 查看valgrind 版本,而且驗證是否安裝成功

2、查看內存泄漏示例ios

#include <iostream>
using namespace std;

int main()
{
    char *p = new char[10];
    *p = 'a';
    *p++ = 'b';

    cout << p << endl;

    return 0;
}

 g++ -g -o core main.cpp

 valgrind --leak-check=yes --show-reachable=yes --log-file=a.log ./core

 valgrind --leak-check=full  --show-reachable=yes  --log-file=a.log ./shdaily.fcgi "op=search&date=2011-04-14&current=4"

--tool=memcheck     //使用valgrind的memcheck功能

-show-reachable=yes    //是否檢測控制範圍以外的泄漏,好比全局指針、static指針等

--log-file=a.log      //結果輸出到文件

--leak-check=full      //顯示具體代碼中泄漏的地方

而後能夠看出哪一行內存泄漏了編程

  1. 概述
  2. Valgrind
    1. 內存泄漏監測
      3.1. 示例代碼
      3.2. 編譯它
      3.3. 用Valgrind監測進程的內存泄漏
  3. 懸掛指針
    4.1. 示例代碼
    4.2. Valgrind運行結果
  4. 屢次釋放同一個指針
    5.1. 示例代碼
    5.2. Valgrind 監測
  5. Valgrind的優缺點
    6.1. Advantages
    6.2. Disadvantages
  6. Valgrind的其餘工具
    7.1. Cachegrind
    7.2. Callgrind
    7.3. Helgrind
    7.4. DRD
    7.5. Massif
    7.6. DHAT

1 概述
在用C/C++編程的時候,常常會出現下面三種內存問題:ide

內存泄漏
懸掛指針
屢次釋放同一塊內存
本系列文章簡要介紹排查這三個問題的工具和方法,先看看Valgrind

int main()
{
    char *p = malloc(sizeof(char) * 10);
    if (p == NULL) 
    {
        return 0;
    }

    *p++ = 'a';
    *p++ = 'b';

    printf("%s\n", *p);

    return 0;
}
相關文章
相關標籤/搜索