C/C++探究---内存泄漏_内存泄漏 c++-程序员宅基地

技术标签: C/C++  内存泄漏  

1. 什么是内存泄漏

内存泄漏:指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。

看一段代码:

void MemoryLeaks()
 {
    
 // 1.内存申请了忘记释放
 int* p1 = (int*)malloc(sizeof(int));
 int* p2 = new int;
 
 // 2.异常安全问题
 int* p3 = new int[10];
 
 Func(); // 这里Func函数抛异常导致 delete[] p3未执行,p3没被释放.
 
 delete[] p3;
 }

2. 内存泄漏分类

C/C++程序中一般我们关心两种方面的内存泄漏:
·堆内存泄漏(Heap leak)
堆内存指的是程序执行中依据须要分配通过malloc / calloc / realloc / new等从堆中分配的一块内存,用完后必须通过调用相应的 free或者delete 删掉。假设程序的设计错误导致这部分内存没有被释放,那么以后这部分空间将无法再被使用,就会产生Heap Leak。

·系统资源泄漏
指程序使用系统分配的资源,比方套接字、文件描述符、管道等没有使用对应的函数释放掉,导致系统资源的浪费,严重可导致系统效能减少,系统执行不稳定。

3.如何检测内存泄漏

在linux下内存泄漏检测:https://blog.csdn.net/gatieme/article/details/51959654
在windows下使用第三方工具:https://blog.csdn.net/GZrhaunt/article/details/56839765
其他工具:https://www.cnblogs.com/liangxiaofeng/p/4318499.html

4.如何避免内存泄漏

  1. 工程前期良好的设计规范,养成良好的编码规范,申请的内存空间记着匹配的去释放。ps:这个理想状态。但是如果碰上异常时,就算注意释放了,还是可能会出问题。需要下一条智能指针来管理才有保证。
  2. 采用RAII思想或者智能指针来管理资源。
  3. 有些公司内部规范使用内部实现的私有内存管理库。这套库自带内存泄漏检测的功能选项。
  4. 出问题了使用内存泄漏工具检测。ps:不过很多工具都不够靠谱,或者收费昂贵

总结一下:
内存泄漏非常常见,解决方案分为两种:
1、事前预防型。如智能指针等。2、事后查错型。如泄漏检测工具。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tonglin12138/article/details/85726644

智能推荐

layout inspector 生成快照文件_snap shot layout-程序员宅基地

文章浏览阅读272次。首先取消该选框勾选你勾选了这个选项,layout inspector 其实就是动态实时分析并显示布局结果,但是并没有生成我们期望的 captures 文件夹以及快照文件,所以当你需要布局快照时候取消此选项,重新打开 layout inspector;相反,当你需要动态实时分析布局时勾选上。我之前一直有疑惑,启动了 layout inspector 却找不到所谓的 capture 文件夹,找不到快照文件,真是愁死我了(复活甲)。打开工具选择设备和进程build 同级目录下,自动生成 .li 布_snap shot layout

week9 day1 HTML简介和常用标签_week-date theme-tab__p--week-程序员宅基地

文章浏览阅读244次。week9 day1 HTML简介和常用标签一、前端内容介绍二、HTML简介2.1 HTML简介2.2 HTML发展史三、HTML标签与文档结构3.1 HTML标签与文档结构3.2 HTML标签详细语法与注意点3.3 HTML中标签分类3.4 HTML注释四、head内常用标签五、body内常用标签5.1 HTML语义化5.2 字符实体5.3 h 系列标签5.4 p 标签5.5 img 标签5.6 a 标签5.7 列表标签5.8 table 标签5.8.1 表格基础5.8.2 表格属性5.8.3 表格的结构_week-date theme-tab__p--week

pclpy 有序点云的快速双边滤波-程序员宅基地

文章浏览阅读735次。有序点云的快速双边滤波_pclpy

解决libc.so.6: version `GLIBC_2.14′ not found问题_./test: /lib/libc.so.6: version `glibc_2.14' not f-程序员宅基地

文章浏览阅读184次。https://www.xuebuyuan.com/642177.html_./test: /lib/libc.so.6: version `glibc_2.14' not found (required by /lib/lib

音乐盒单片机c语言课程设计,基于PIC16F887单片机数字音乐盒课程设计.doc-程序员宅基地

文章浏览阅读527次。基于PIC16F887单片机数字音乐盒课程设计《单片机原理及应用》课程设计题 目: 数字音乐盒 姓 名: 李国灿 学 号: 011300xxx 学 院: 电气工程与自动化 专 业: 电气工程及其自动化 年 级: 13级..._pic单片机八音盒设计

mac上mysql的GUI工具sequel pro的使用_sequel pro 建索引-程序员宅基地

文章浏览阅读2.2w次。Sequel Pro(原CocoaMySQL) 是众多Mac程序员使用的MySQL管理软件,提供了比phpmyadmin更强大的管理能力,帮助用户轻松编辑数据库,表(字段和索引)和列,执行个性化查找以及导出/入数据,快速查询数据。Sequel Pro它最大的优点是简单、易用。因为这款工具是苹果公司为了吸引Web开发者进入Mac平台而投资的项目。所以它处处体现了苹果公司简洁的设计哲学。说_sequel pro 建索引

随便推点

压力测试工具siege_安装,常用命令,结果说明_siege aborted due to excessive socket failure; you-程序员宅基地

文章浏览阅读528次。安装下载连接:$ wget http://www.joedog.org/pub/siege/siege-latest.tar.gzhttp://download.joedog.org/siege/siege-4.0.2.tar.gz得到最新包siege-latest.tar.gz解压之。$ tar xvf siege-latest.tar.gz得到的具体版本就是siege-3.0.6..._siege aborted due to excessive socket failure; you can change the failure th

HYSBZ - 2038 小Z的袜子(hose) (莫队入门)_hysbz 1217-程序员宅基地

文章浏览阅读159次。题目:作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿。终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同色的袜子会很尴尬。你的任务便是告诉小Z,他有多大的概率抽到两只..._hysbz 1217

【Docker】安装 Nacos 2.0.3(单机版)_docker nacos2.0.3-程序员宅基地

文章浏览阅读4.3k次。1 如果不加jvm参数的话,nacos会很占服务器内存。测试了下不加任何jvm参数启动后实际占用内存900多M,加了上述jvm参数后降低到440多M。application.properties内容如下,该文件是通过docker cp命令原封不动的从nacos容器中拷贝出来的。而2.0.3版本挂载的文件是/home/nacos/conf/application.properties。低版本(1.4.x)挂载的文是/home/nacos/init.d/custom.properties。_docker nacos2.0.3

【hadoop pig】pig安装及使用_pig在windows运行-程序员宅基地

文章浏览阅读8.8k次。1 运行环境说明1.1 硬软件环境l 主机操作系统:Windows 64 bit,双核4线程,主频2.2G,6G内存l 虚拟软件:VMware Workstation 9.0.0 build-812388l 虚拟机操作系统:CentOS 64位,单核,1G内存l JDK:1.7.0_55 64 bitl Hadoop:1.1.2 1.2_pig在windows运行

Android根据图片path转成Uri,分享图片_uri.pa-程序员宅基地

文章浏览阅读3.1k次。先给出代码:通过uri.fromfile()方法将图片path,转化为uri,然后送给EXTRA_STREAM,实现分享//分享 Uri pa=Uri.fromFile(new File(filePath));//根据路径转化为uri Intent imageIntent = new Intent(Intent.ACTION..._uri.pa

Android Edittext详解_android windowmanager edittext-程序员宅基地

文章浏览阅读498次。android:password=”true”老版本时,我们常用此来实现输入是密码。后来此方法过期了。Android推出了新的方法实现。android:inputType=”textPassword”现在google推荐使用这个方法了。inputType属性释义android:inputType=”none” android:inputType=”text”文本 android:inputTyp_android windowmanager edittext

推荐文章

热门文章

相关标签