对于初学者(我)内存泄露是一个尴尬又不得不面对的一个问题。
本文介绍了一个C++内存泄露的检测工具:Valgrind
主要从以下的几个步骤介绍这个工具。
工具介绍
Valgrind是一个用来分析代码执行的工具集,主要由以下的几个工具组成:
- Memcheck是一个内存错误检测器。它有助于使你的程序,尤其是那些用C和C++写的程序,更加准确。
- Cachegrind是一个缓存和分支预测分析器。它有助于使你的程序运行更快。
- Callgrind是一个调用图缓存生成分析器。它与Cachegrind的功能有重叠,但也收集Cachegrind不收集的一些信息。
- Helgrind是一个线程错误检测器。它有助于使你的多线程程序更加准确。
- DRD也是一个线程错误检测器。它和Helgrind相似,但使用不同的分析技术,所以可能找到不同的问题。
- Massif是一个堆分析器。它有助于使你的程序使用更少的内存。
- DHAT是另一种不同的堆分析器。它有助于理解块的生命期、块的使用和布局的低效等问题。
- SGcheck是一个实验工具,用来检测堆和全局数组的溢出。它的功能和Memcheck互补:SGcheck找到Memcheck无法找到的问题,反之亦然。
- 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