首页 > 系统相关 >什么是内存泄漏?如何避免?

什么是内存泄漏?如何避免?

时间:2024-12-15 15:31:04浏览次数:4  
标签:泄漏 释放 函数 避免 内存 析构 基类

内存泄漏(memory leak)是指由于疏忽或错误造成了程序未能释放掉不再使⽤的内存的情况。内存泄漏并⾮指内存
在物理上的消失,⽽是应⽤程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因⽽造成了内存的浪
费。可以使⽤Valgrind, mtrace进⾏内存泄漏检查。

有什么类别?
(1)堆内存泄漏 (Heap leak)
对内存指的是程序运⾏中根据需要分配通过malloc,realloc new等从堆中分配的⼀块内存,再是完成后必须通过调
⽤对应的 free或者 delete 删掉。如果程序的设计的错误导致这部分内存没有被释放,那么此后这块内存将不会被
使⽤,就会产⽣ Heap Leak.
(2)系统资源泄露(Resource Leak)
主要指程序使⽤系统分配的资源⽐如 Bitmap,handle ,SOCKET 等没有使⽤相应的函数释放掉,导致系统资源的浪
费,严᯿可导致系统效能降低,系统运⾏不稳定。
(3)没有将基类的析构函数定义为虚函数
当基类指针指向⼦类对象时,如果基类的析构函数不是 virtual,那么⼦类的析构函数将不会被调⽤,⼦类的资源没
有正确是释放,因此造成内存泄露

如何解决?
将内存的分配封装在类中,构造函数分配内存,析构函数释放内存;使⽤智能指针

标签:泄漏,释放,函数,避免,内存,析构,基类
From: https://www.cnblogs.com/chhblogs/p/18608038

相关文章

  • Go 内存管理
    操作系统内存管理操作系统管理内存的存储单元是页(page),在linux中一般是4KB。而且,操作系统还会使用虚拟内存来管理内存,在用户程序中,我们看到的内存是不是真实的内存,而是虚拟内存。当访问或者修改内存的时候,操作系统会将虚拟内存映射到真实的内存中。申请内存的组件是PageTab......
  • 如何在 MySQL 中避免单点故障?
    如何在MySQL中避免单点故障?在MySQL中避免单点故障(SPOF,SinglePointofFailure)是确保数据库高可用性和系统稳定性的关键。通过采取以下几种策略,可以最大程度地减少单点故障的风险:1.主从复制(Master-SlaveReplication)MySQL主从复制可以帮助减少单点故障。在主从复制架......
  • 性能测试-内存溢出时的分析工具使用
    下载内存分析工具地址:https://eclipse.dev/mat/downloads.phphp)下载对应的版本,我这里使用的windows的就下载windows版本的包,下载完成后解压配置启动时的jdk的依赖,目前1.15.0版本的需要jdk17以上,我们在启动时需要手工修改MemoryAnalyzer.ini文件,添加指定的jdk的本地路径-vm......
  • 【C 语言文件操作】—— 内存映射与高效 I/O 策略的深度融合
    C语言学习笔记:C语言梦开始的地方__Zwy@的博客-CSDN博客 各位于晏,亦菲们,请点赞关注!我的个人主页:_Zwy@-CSDN博客目录1、文件1.1、文件的概念1.1.1、物理层面1.1.2、逻辑层面1.2、文件的类型1.3、文件名1.3.1、命名规则 1.3.2、组成部分1.3.3、作用1.3.4、文......
  • PbootCMS升级过程中如何避免“执行SQL发生错误”?
    在PbootCMS升级过程中,为了避免“执行SQL发生错误”,可以采取以下几种措施:备份数据库:在开始升级之前,务必备份现有的数据库。这可以在出现问题时帮助你快速恢复。使用SQLite数据库管理工具(如DBBrowserforSQLite),导出当前数据库的备份文件。手动执行SQL语句:如果自动升级......
  • 数据库查询性能优化-正确使用索引避免全表扫描
    优化查询最重要的就是,尽量使语句符合查询优化器的规则避免全表扫描而使用索引查询。具体要注意的:1.应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描。如:selectidfromtwherenumisnull可以在num上设置默认值0,确保表中num列没......
  • C语言(动态内存分配)
    动态内存分配我们要想实现动态内存分配,就需要学习标准C提供的函数库(API):函数所属的库文件函数的原型-函数的声明函数名形参返回值类型函数功能注意:内存分配函数在申请内存时,建议用多少申请多少,可以有少量的预留量;但不能越界访问(虽然编译和运行不报错,但是数据不安全(野......
  • C语言(野指针及内存操作)
    野指针、空指针、空悬指针野指针定义:指向一块未知区域(已经销毁或者访问受限的内存区域外的已存在或不存在的内存区域)的指针,被称作野指针。野指针是危险的。危害:①引用野指针,相当于访问了非法的内存,常常会导致段错误(segmentationfault),也有可能编译运行不报错。②引......
  • 阅记-横向优化-底层架构-《HPC-一文彻底搞懂并发编程与内存屏障》
    目录MomoryOrdering9.2.3.2NeitherLoadsNorStoresAreReordered9.2.3.3StoresAreNotReorderedWithEarlierLoads9.2.3.4LoadsMayBeReorderedwithEarlierStores(intelx64架构下唯一会有memoryreorder的情况)内存屏障的实现参考:HPC(高性能计算第一篇):一文彻......
  • 在21世纪的我用C语言探寻世界本质——动态内存管理及相关笔试题
    人无完人,持之以恒,方能见真我!!!共同进步!!文章目录一、为什么有动态内存分配二、malloc和free1.malloc函数的使用2.free函数的使用三、calloc和realloc1.calloc函数的使用2.realloc函数的使用四、常见动态内存分配的错误五、动态内存经典笔试题六、总结C/C++中程序内存区......