码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C/C++内存泄漏的原因以及怎么解决


    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

    文章目录

    • 背景
    • 一、malloc后未释放
    • 二、未匹配


    背景

    提示:这里可以添加本文要记录的大概内容:

    C/C++编程语言中,内存的分配与回收都是由开发人员主动进行的,比如使用malloc/new申请内存,free/delete进行释放内存。
    这样做的好处是内存管理的开销较小,程序员拥有更高的执行效率。
    坏处是随着代码的扩大和开发者水平的限制,或者一些不规范的编程习惯可能会使程序具有安全隐患,导致内存泄漏、系统崩溃等后果产生,下面就让我们一起看看常见的内存泄漏的情况吧


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、malloc后未释放

    代码示例:

    int fun() {
        char * pBuffer = malloc(sizeof(char));
        /*Do some work*/
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    上面代码是我们常见的一种情况,我们申请了一块内存但是在函数结束时并没有进行释放。
    这时需要在return 0执行free()。
    在C/C++中还有一种内存泄漏
    代码示例:

    class Obj {
     public:
       Obj(int size) {
         buffer_ = new char;
       }
       ~Obj(){}
      private:
       char *buffer_;
    };
    
    int fun() {
      Object obj;
      // do sth
      return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    上面这段代码中,析构函数没有释放成员变量buffer_指向的内存,所以在编写析构函数的时候,一定要仔细分析成员变量有没有申请动态内存,如果有,则需要手动释放,我们重新编写了析构函数,如下:

    ~Object() {
      delete buffer_;
    }
    
    • 1
    • 2
    • 3

    二、未匹配

    使用malloc进行内存分配后,要使用free进行释放,
    使用new申请内存之后,要使用delete进行删除。

  • 相关阅读:
    【数据结构-图】最短路径
    应用实战|微信小程序开发示例之在线商城
    【LTTng】核心概念精读
    搭建Spark on yarn环境
    【数据处理】Python matplotlib绘制双柱状图以及绘制堆积柱状图——保姆级教程
    Java学习之路 —— 多线程
    idm下载器中文版下载切换语言教程
    Python--练习:报数字(数7)
    实时目标检测:基于YOLOv3和OpenCV的摄像头应用
    分布式事务
  • 原文地址:https://blog.csdn.net/weixin_45683963/article/details/127642155
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号