Linux下C以及C++程序中内存泄漏检测

小微 科技Linux下C以及C++程序中内存泄漏检测已关闭评论100字数 1269阅读模式
摘要01. 前言C/C++运行高效,不管是操作系统内核还是对性有要求的程序(比如游戏引擎)都要求使用C/C++来编写,其实C/C++强大的一点在于能够使用指针自由地控制内存的使用,适时...

01.

C/C++运行高效,无论是操作系统内核还是对性有请求的程序(比如游戏引擎)都请求使用C/C++来编写,其实C/C++强大的一点在于能够使用指针自由地节制内存的使用,适时的申请内存以及释放内存,从而做到其他编程语言做不到的高效地运行。然而内存管理是一把双刃剑,用文章源自微观生活(93wg.com)微观生活-https://93wg.com/18824.html

C语言中申请内存以及释放内存的办法是使用 malloc以及free。文章源自微观生活(93wg.com)微观生活-https://93wg.com/18824.html

C++中能兼容C,所以也能使用malloc以及free,面向对象的情况下使用的则是new以及delete,能够自动执行构造函数以及析构函数。文章源自微观生活(93wg.com)微观生活-https://93wg.com/18824.html

在Linux平台,咱们可使用valgrind命令检测C/C++程序是不是内存泄漏。文章源自微观生活(93wg.com)微观生活-https://93wg.com/18824.html

02. valgrind安装文章源自微观生活(93wg.com)微观生活-https://93wg.com/18824.html

debian/ubuntu下安装办法:文章源自微观生活(93wg.com)微观生活-https://93wg.com/18824.html

 deng@itcast:~$ sudo apt install valgrind deng@itcast:~$ sudo yum install valgrind文章源自微观生活(93wg.com)微观生活-https://93wg.com/18824.html

安装好valgrind工具以后,下面来看看valgrind的几个利用场景。文章源自微观生活(93wg.com)微观生活-https://93wg.com/18824.html

redhat/centos下安装办法:文章源自微观生活(93wg.com)微观生活-https://93wg.com/18824.html

03. 使用未初始化的内存文章源自微观生活(93wg.com)微观生活-https://93wg.com/18824.html

程序中咱们定义了一个指针p,但并未给他分配空间,但咱们却使用它了。

程序示例:

 

04. 使用野指针

p所指向的内存被释放了,p变为了野指针,然而咱们却继续使用这片内存。

程序示例:

 

05. 动态内存越界走访

咱们动态地分配了一片连续的存储空间,但咱们在走访个数组时产生了越界走访。

程序示例:

 

注意:

valgrind不检查非动态分配数组的使用情况。

06. 分配空间后没有释放

内存泄露的缘由在于咱们使用free或者new分配空间以后,没有使用free或者delete释放内存。

程序示例:

 

可使用--leak-check=full进一步获取内存泄露的信息,比如malloc具体行号。

07. 不匹配使用delete或者free

一般咱们使用malloc分配的空间,必需使用free释放内存。使用new分配的空间,使用delete释放内存。

程序示例:

 

08. 两次释放同一块内存

一般情况下,内存分配一次,只释放一次。如果屡次释放,可能会呈现double free。

程序示例:

 

09. 总结

内存泄漏问题无比难定位,对于小工程项目来讲,简单去检查代码中new以及delete的匹配对数就基本能定位到问题,然而一旦代码量上升到以万单位时,仅靠肉眼检查来定位问题那就无比难题了,所以咱们需要应用工具帮助咱们找出问题所在。在Linux系统下内存检测工具首推Valgrind,一款无比好用的开源内存管理工具。Valgrind实际上是一个工具集,内存过错检测只是它众多功能的一个,但咱们用得至多的功能恰是它——memcheck。

总之,valgrind工具可以检测以下与内存相关的问题 :

· 未释放内存的使用

· 对释放后内存的读/写

· 对已分配内存块尾部的读/写

· 内存泄漏

· 不匹配的使用malloc/new/new[] 以及 free/delete/delete[]

· 重复释放内存

以上就是微观生活(93wg.com)关于“Linux下C以及C++程序中内存泄漏检测”的详细内容,希望对大家有所帮助!

继续阅读
 
小微
  • 版权声明: 本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们(管理员邮箱:81118366@qq.com),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!
  • 转载请务必保留本文链接:https://93wg.com/18824.html