0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是内存泄漏?内存泄漏有哪些现象

工程师邓生 来源:嵌入式悦翔园 作者:JamesBin 2022-09-05 17:24 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

今天在做项目的时候被发现有个指针变量的输出值总是莫名其妙,最后查清了原因发现是因为内存泄漏了!

有些小伙伴看到这就有点疑惑了,怎么内存还会泄漏呢?我只听过漏水、漏油,还没听过内存还会泄漏!

内存泄漏几乎是很难避免的,不管是老手还是新手,都存在这个问题,甚至 Windows 与 Linux 这类系统软件也或多或少存在着内存泄漏。

所以我还是那句话:不会用指针就不要用,不要你埋的雷让我来踩!

什么是内存泄漏

在计算机科学中,内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存

内存泄漏并非指内存在物理上的消失,而指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

在C中出现内存泄漏的主要原因就是程序猿在申请了内存后,没有及时释放没用的内存空间,甚至消灭了指针导致该区域内存空间根本无法释放

知道了出现内存泄漏的原因就能知道如何应对内存泄漏,即:不用了的内存空间记得释放,不释放留着过年哇!

内存泄漏的严重后果

要说内存泄漏的后果,那我就告诉你,内存泄漏会让你查程序查到怀疑人生,特别是对于新人来说,自己本来就对指针、内存这些东西不太熟悉,自己也不敢用,结果由于“大佬”的自信操作,造成你查起来真的非常非常费劲!

因为内存泄漏的堆积,最终消耗尽系统所有的内存。所以一次性内存泄漏并没有什么危害,因为一次性的内存泄漏并不会堆积。但是如果你遇到的是隐式内存泄漏的危害性则非常大,因为较之于常发性,偶发性内存泄漏它更难被检测到。

长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。

内存泄漏有哪些现象

发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏,所以当你程序出现莫名其妙的问题时,记得想到这点。

另外内存泄漏还具有偶发性,发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块且仅一块内存发生泄漏,同样会出现莫名其妙的问题,并且这种问题还不是每次都会发生,比上面的情况更加莫名其妙。

程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。

但是对于一个程序,可能需要运行几天、几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。

如何避免内存泄漏

关于如何避免内存泄漏我总结了以下几点:

在函数中看到有局部指针,就要警惕内存泄漏问题,养成进一步排查的习惯;

在内存分配后别忘记使用 free 进行释放,alloca 函数除外;

确保自己写的程序没有在访问空指针;

每次分配内存之后都应该及时进行初始化,可以结合 memset 函数进行初始化,calloc 函数除外;

每当向指针写入值时,都要确保对可用字节数和所写入的字节数进行交叉核对;

在对指针赋值前,一定要确保没有内存位置会变为孤立的;

始终正确处理返回动态分配的内存引用的函数返回值;

结语

由于我是做汽车行业SOC开发的,所以内存泄漏真的很可怕,你想想你正在高速上开着车,结果由于内存泄漏,你的车载系统突然崩溃,你想想可怕不,刹车失灵,方向盘卡死!

所以汽车行业对于内存泄漏的要求是非常严格,会有专人review你写的代码,如果你申请完内存不释放,那你完了!



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • WINDOWS
    +关注

    关注

    4

    文章

    3711

    浏览量

    94508
  • Linux系统
    +关注

    关注

    4

    文章

    618

    浏览量

    30258
  • 内存泄漏
    +关注

    关注

    0

    文章

    42

    浏览量

    9557

原文标题:我真的被C语言里的内存泄漏整蒙了

文章出处:【微信号:嵌入式悦翔园,微信公众号:嵌入式悦翔园】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    嵌入式项目摄像头拍照稳定性优化:内存占用计算与工程落地实践

    合宙excamera库通过封装底层驱动,可自动处理内存泄漏、冲突等问题,并提供长供电、低功耗两种典型场景可复用代码,缩短适配周期。本文结合项目实操,搭配代码示例,解析两种拍照模式的实现逻辑、内存差异及工程注意事项,聚焦技术落地。
    的头像 发表于 05-25 15:41 79次阅读

    用\"看\"的方式捕捉SF6气体泄漏:红外检漏仪的原理与优势

    一、SF6气体泄漏:不能忽视的运维风险 SF6(六氟化硫)气体因其优异的绝缘和灭弧性能,广泛应用于GIS(气体绝缘开关设备)、气体绝缘变压器、断路器等高压电力设备中。然而,SF6一旦发生泄漏,会带来
    发表于 05-06 11:09

    运行测试程序以读取通过受信任应用程序 (TA) 存储的安全 blob 时,内存不足怎么解决?

    使用给定密钥解密其中一些密钥。 它发生在执行至少 15 分钟后,TA 和 tee-os 没有错误日志(仅出现调试消息)。 我最初怀疑它来自内存泄漏,但由于缺乏来自 TA 和 tee-os 的错误消息,它
    发表于 04-10 10:52

    DDR5内存断崖式下跌或引发踩踏式抛货?

    内存
    芯广场
    发布于 :2026年03月30日 15:35:23

    一次内存泄漏排查复盘

    的日志采集和边车也跟着抖。现场最容易犯的错是看到内存高就先重启,或者只看 free -h 就把锅甩给 page cache。这样做能把告警按掉,但根因还在,第二波流量一来还会复发。
    的头像 发表于 03-11 09:52 510次阅读

    MangoTree Halo Ultra「全新PXI」,标配自动纠错内存#

    内存
    芒果树数字
    发布于 :2026年03月06日 15:59:34

    内存条崩了?涨了十倍的内存颗粒卖给谁?内存芯片接下来怎么玩?

    内存
    芯广场
    发布于 :2026年01月26日 17:48:21

    keil中c语言的动态分配内存

    与于编译器。 下面说一说free这个函数。 动态开辟的内存只有在程序结束时操作系统才进行回收,所以当我们不使用动态开辟的內存时必须手动将其释放掉(不然会造成内存泄漏),释放动态开辟的内存
    发表于 01-21 06:04

    内存持续涨价,多重信号预警成本压力#内存芯片#涨价#行业#消费电子#AI#

    内存芯片
    jf_15747056
    发布于 :2026年01月08日 18:38:35

    化工厂液体泄漏识别预警系统

    对工厂机械管道液体泄漏情况自动识别,如检测漏液情况,立即反馈给后台人员,防止安全事故的发生,有效地提高了人工巡检的效率。
    的头像 发表于 12-17 18:29 627次阅读
    化工厂液体<b class='flag-5'>泄漏</b>识别预警系统

    WebGL/Canvas 内存泄露分析

    在构建高性能、长周期运行的 WebGL/Canvas 应用(如 3D 编辑器、数据可视化平台)时,内存管理是一个至关重要且极具挑战性的课题。 开发者通常面临的内存泄漏问题,其根源远比简单
    的头像 发表于 10-21 11:40 618次阅读
    WebGL/Canvas <b class='flag-5'>内存</b>泄露分析

    at_device 包 ml307长时间运行内存泄漏问题怎么解决?

    使用 at_device 包中的 ml307 包长时间运行大量内存泄漏问题,大概涨了20K,求助解决。
    发表于 09-24 07:41

    如何通过PinView检查I/O电流泄漏

    如何通过PinView检查I/O电流泄漏
    发表于 08-25 07:45

    在OpenVINO™ C++代码中启用 AddressSanitizer 时的内存泄漏怎么解决?

    在 OpenVINO™ C++代码中启用 AddressSanitizer 时遇到内存泄漏: \"#0 0xaaaab8558370 in operator new(unsigned
    发表于 06-23 07:16

    鸿蒙5开发宝藏案例分享---内存优化实战指南

    、第三方 Native 库、部分系统框架)分配的内存。如果这里异常高,就要检查 Native 代码或使用的库是否内存泄漏或大对象分配。 ?** 开发者视角** 何时用? 当你感觉
    发表于 06-12 17:15