linux下检测内存泄漏

使用开源工具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.使用未进行初始化的对内存
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值