C/C++内存泄漏的原因以及怎么解决

2023-10-29

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


背景

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

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


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

一、malloc后未释放

代码示例:

int fun() {
    char * pBuffer = malloc(sizeof(char));
    /*Do some work*/
    return 0;
}

上面代码是我们常见的一种情况,我们申请了一块内存但是在函数结束时并没有进行释放。
这时需要在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;
}

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

~Object() {
  delete buffer_;
}

二、未匹配

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C/C++内存泄漏的原因以及怎么解决 的相关文章

随机推荐

  • 2020年计算机、信安推免总结

    这里写自定义目录标题 个人情况 夏令营 浙软和南软 四川大学网络空间安全学院 湖南大学信科院 西工大软件学院 北京交通大学软件学院 预推免 中科院网络信息中心 浙江大学软件学院 天津大学智算学部 华中科技大学网络空间安全学院 东南大学网络空
  • 添加votedisk

    1 添加votedisk 必须有一半以上的votedisk同时可用 clusterware才能正常工作 否则cluster立刻宕掉 所以最好votedisk保持单数个 添加和删除votedisk的操作非常危险 必须在停止数据库 停止asm
  • Unity3D暂停,继续游戏,重新开始,退出,以及 UnityEditor.EditorApplication打包后不会执行

    1 暂停游戏 Time timescale 0 2 继续游戏 Time timescale 1 3 重新开始 using UnityEngine SceneManagement SceneManager LoadScene 0 其中 0 为
  • Python 中的<>和!= 区别

    今天在编写Python MySQL 采集脚本过程中 需要使用到 不等于 表达方式 第一种写法 在Python2 6以前版本 不等于 if string atof func get item mysql status Qcache hits
  • C++/C++11中头文件algorithm的使用

  • Ubuntu20.04 操作系统切换中文 & 安装中文输入法

    网上有很多的帖子指导如何安装搜狗输入法 我也尝试过 需要安装一些指令 解决依赖很麻烦 很消耗精力 也找不到简便的办法 因此还是用系统自带的输入法吧 一 换源 这一步很重要 系统下载输入法时 能够从阿里云服务器下载大大提升速度 具体请参考拙作
  • 中国数字经济发展指数报告(2023年)

    报告 显示 数字经济具有高度发展驱动性 各地区数字经济发展指数与地区综合经济实力具有高度正相关性 数字经济对于促进地区经济发展的驱动能力强劲 关注公众号 互联互通社区 回复 SZJJ396 获取全部报告内容 从总指数结果来看 我国数字经济呈
  • DDR3相关概念

    1 BL8 突发长度 理解一下概念 突发传输 在通信领域中一般指在短时间内进行相对高带宽的数据传输 Burst 突发 是指在同一行中相邻的存储单元连续进行数据传输的方式 BL突发长度 连续传输的周期数就是突发长度 在突发传输的模式下 多个数
  • tcp长连接的双向加密

    一 历史和基础 做即时通讯项目 网游登录等业务时 我们通常需要一种能在线回推的机制 这时候客户端的tcp长连接就可能派上用场了 示意图 二 问题产生 曾经做过一个项目 之前老的加密方案为 1 客户端发一个rsa公钥G1给服务端 明文 自己留
  • PaddleOCR详解和识别图片中文字

    前言 paddleocr可以说是最近ocr的主 军 家对于paddleocr的认可度是相当的 特别是最近推出的轻量级模型 可以识别近80种语 并且效率是这三种ocr工具种最 的 相同的图 paddleocr只需要2秒左右 对于多场景的 语种
  • 计算机键盘字母记忆,键盘26个字母口诀是怎样的?

    01 七 Q 碗 W 鹅 E 肉 R 汤 T 已 Y 无 W 一 Y 我 W 婆 P 爱 A 死 S 豆 D 腐 F 羹 G 回 H 家 J 快 K 乐 L 自 Z 行 X 车 C 未 V 帮 B 你 N 买 M 众所周知 计算机键盘字母是
  • MongoDB3.0+ 添加用户命令

    关键命令 db createUser user coolead pwd coolead roles role dbOwner db mycoolead C Program Files MongoDB Server 3 2 bin gt mo
  • matlabe基于残差学习的图像去噪_《利用组稀疏残差约束进行图像去噪》

    题目 利用组稀疏残差约束进行图像去噪 来源 Zha Z Liu X Zhou Z et al Image denoising via group sparsity residual constraint C 2017 IEEE Intern
  • Java do-while循环学习小结

    do while循环先执行循环 再判断条件 do while循环会至少执行一次 具体内容扫描关注公众号
  • Django基础之Model操作

    一 数据库操作 1 创建model表 基本结构 1 coding Utf8 2 from django db import models 3 4 class userinfo models Model 5 如果没有models AutoFi
  • 程序员工作交接文档怎么写_程序员如何优雅的做好离职交接工作?

    1背景 某项目负责人离职 仅在离职前不到一周工作交接给我 该项目特点 1 所有参与人员尽数几乎全部离职 2 项目开始时间 2012年 数易版本 已经4年多的大项目 3 涉及模块众多 部署文档已经没有最新的 4 有Git版本管理 但资料不全且
  • 三极管驱动电路(扩充单片机的输出电流)

    常见的三极管驱动有两种结构 共射极输出 共集电极输出 I 共射极输出 PNP 要求输入的动态范围要大 而且输出的电压范围永远比输入小0 7V 射极输出电路就不能有效的利用 5V的电源 实际上 加到继电器上的电压 不足 4V 除非是使用4V的
  • 2.2 Git 基础 - 记录每次更新到仓库

    2 2 Git 基础 记录每次更新到仓库 版本说明 版本 作者 日期 备注 0 1 loon 2019 3 19 初稿 目录 文章目录 2 2 Git 基础 记录每次更新到仓库 版本说明 目录 记录每次更新到仓库 Figure 8 文件的状
  • Android自定义View --- 绘制圆环

    Android自定义View实现很简单 继承View 重写构造函数 onDraw onMeasure 等函数 如果自定义的View需要有自定义的属性 需要在values下建立attrs xml 在其中定义你的属性 在使用到自定义View的x
  • C/C++内存泄漏的原因以及怎么解决

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 背景 一 malloc后未释放 二 未匹配 背景 提示 这里可以添加本文要记录的大概内容 C C 编程语言中 内存的分配与回收都是由开发人员主动进行的 比如使用ma