对于初学者(我)内存泄露是一个尴尬又不得不面对的一个问题。

本文介绍了一个C++内存泄露的检测工具:Valgrind

主要从以下的几个步骤介绍这个工具。

工具介绍

        Valgrind是一个用来分析代码执行的工具集,主要由以下的几个工具组成:

       

  1. Memcheck是一个内存错误检测器。它有助于使你的程序,尤其是那些用C和C++写的程序,更加准确。
  2. Cachegrind是一个缓存和分支预测分析器。它有助于使你的程序运行更快。
  3. Callgrind是一个调用图缓存生成分析器。它与Cachegrind的功能有重叠,但也收集Cachegrind不收集的一些信息。
  4. Helgrind是一个线程错误检测器。它有助于使你的多线程程序更加准确。
  5. DRD也是一个线程错误检测器。它和Helgrind相似,但使用不同的分析技术,所以可能找到不同的问题。
  6. Massif是一个堆分析器。它有助于使你的程序使用更少的内存。
  7. DHAT是另一种不同的堆分析器。它有助于理解块的生命期、块的使用和布局的低效等问题。
  8. SGcheck是一个实验工具,用来检测堆和全局数组的溢出。它的功能和Memcheck互补:SGcheck找到Memcheck无法找到的问题,反之亦然。
  9. BBV是个实验性质的SimPoint基本块矢量生成器。它对于进行计算机架构的研究和开发很有用处。

由以上介绍可以看出,其实我们当下最需要用的就是Memcheck,用来对内存错误进行检测

该工具可以检测下列与内存相关的问题 :

  • 未释放内存的使用
  • 对释放后内存的读/写
  • 对已分配内存块尾部的读/写
  • 内存泄露
  • 不匹配的使用malloc/new/new[] 和 free/delete/delete[] 重复释放内存

 

实现功能

安装方法

https://blog.csdn.net/stpeace/article/details/61620301

wget http://www.valgrind.org/downloads/valgrind-3.15.0.tar.bz2
tar jxvf valgrind-3.15.0.tar.bz2
cd valgrind-3.15.0
./configure --prefix=/root/valgrind-3.15.0
make
make install