使用开源工具valgrind
下载请点击,发行版本链接
安装步骤:
1.解压文件 tar -jxvf valgrind-x.x.x.tar.bz2
2.进入文件目录 cd valgrind-x.x.x
3.在目录下执行 ./configure
4.使用make进行自动化编译 make
5.安装 make install
复制
ubuntu用户可以使用:
sudo apt-get install valgrind
进行安装
在C/C++程序中,使用指针虽然是非常高效的,但是伴随而来的一旦使用方法不得当就会造成大量的内存碎片。而C++程序对(heap memory)的申请和释放都由程序员手工完成的。但是在大型程序中,一旦出现内存泄漏的问题也难以通过一行一行的逻辑判断进行查找,这是十分痛苦的。当然智能指针(smart pointer)的出现方便管理堆内存,有兴趣的朋友们可以下载boost库的源码学习智能指针是怎么管理堆内存的以及它的特性,但是今天我们讨论的重点是如何使用开源工具检测内存泄漏。
boost c++库链接
下面使用valgrind检测常见的内存错误,首先对常见的内存错误进行分类
1.使用野指针
2.重复释放同一块内存
3.new和delete或malloc和free没有配对使用,造成内存泄漏
4.使用未进行初始化的对内存
1.使用野指针
test.cpp
#include <iostream>
using namespace std;
int main(){
int *pint = new int;//动态申请内存
*pint = 30;
delete pint;//释放内存
cout<<*pint<<endl;//使用野指针
return 0;
}
g++ test.cpp -g -o test
valgrind --tool=memcheck ./test进行检测
复制

2.重复释放内存
#include <iostream>
using namespace std;
int main(){
int* pint = new int;
delete pint;
delete pint;
return 0;
}
g++ test.cpp -g -o test
valgrind --tool=memcheck ./test进行检测
复制
3.new和delete或malloc和free没有配对使用,造成内存泄漏
test.cpp
#include <iostream>
using namespace std;
int main(){
int* pint = new int;
*pint = 30;
return 0;
}
g++ test.cpp -o test -g
valgrind --tool=memcheck ./test
复制
4.使用未进行初始化的对内存