前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux下检测内存泄漏

linux下检测内存泄漏

作者头像
lexingsen
发布2022-02-24 18:58:19
3.2K0
发布2022-02-24 18:58:19
举报
文章被收录于专栏:乐行僧的博客

使用开源工具valgrind 下载请点击,发行版本链接

安装步骤:

代码语言:javascript
复制
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.使用野指针

代码语言:javascript
复制
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.重复释放内存

代码语言:javascript
复制
#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没有配对使用,造成内存泄漏

代码语言:javascript
复制
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.使用未进行初始化的对内存

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档