文章目录

  • 一、内存溢出定义
  • 二、内存溢出原因
  • 三、常见的一些内存溢出风险
    • 3.1 strcpy 函数
    • 3.2 sprintf函数
    • 3.3 malloc函数

一、内存溢出定义

指程序在申请内存时,没有足够的内存空间供其使用,出现 out of memory,通常出现在某一块内存空间耗尽的时候

二、内存溢出原因

  1. 内存中加载的数据量过于庞大,例如给 int 整型变量赋予了 long 类型的数据
  2. 代码中存在死循环
  3. 内存分配未成功,却继续使用,可以在使用内存之前检查指针是否为 NULL 进行判断
  4. 内存分配成功,但是未初始化就引用它
  5. 内存分配成功,初始化后有对变量的引用,使用完后未释放
  6. 内存分配成功,初始化后,操作变量越过了内存的边界

三、常见的一些内存溢出风险

3.1 strcpy 函数

函数原型:char strcpy(char dest, const char *src);
函数功能:把从 src 地址开始且含有 NULL 结束符的字符串复制到 dest 地址
函数说明:src 和 dest 指向内存区域不可以重叠;dest 必须有足够的空间来容纳 src 的字符串
备注:当 src 的长度大于 dest 分配到的空间,就会出现内存溢出,应当使用 strncpy 避免

3.2 sprintf函数

函数原型:int sprintf(char *buffer, const char *format, [argument]…);
函数功能:格式化字符串,将格式化的数据写入字符串指针 buffer 中
备注:当写入的数据长度比 buffer 的内存空间大,则会导致内存溢出,应当尽量使用snprintf避免

3.3 malloc函数

使用 malloc 函数,需要释放内存空间,还要将原先的指针变量赋予一个 NULL 空指针,如果忘记赋予 NULL 会导致原先的指针变量成为了一个野指针,没有明确指向,系统不知道它会指向什么地方

calloc函数就不需要手动赋予 NULL,是因为在每次调用完calloc函数的时候系统会自动将原先的指针赋予一个空指针

内存学习(二)内存溢出介绍以及解决思路相关推荐

  1. Netty 内存池(二)内存申请流程

    Netty 内存池(二)内存申请流程 上期带大家了解了一下Netty内存池都有哪些重要的对象,以及这些对象的作用是什么,本期就带大家分析一下线程是如何申请一块内存的.本期由于涉及到了很多变量和位运算, ...

  2. 常见内存溢出原因及解决思路

    内存溢出(OOM)通常出现在某一块内存空间耗尽的时候,导致内存溢出的原因有很多,常见的有堆溢出.直接内存溢出.永久区溢出等. 堆溢出 堆是Java程序中最为重要的内存空间,由于大量的对象都直接分配在堆 ...

  3. JVM学习--(二)内存模型、可见性、指令重排序

    我们将根据JVM的内存模型探索java当中变量的可见性以及不同的java指令在并发时可能发生的指令重排序的情况. 内存模型 首先我们思考一下一个java线程要向另外一个线程进行通信,应该怎么做,我们再 ...

  4. Box2d源码学习二内存管理之SOA的实现

    本系列博客是由扭曲45原创,欢迎转载,转载时注明出处,http://blog.csdn.net/cg0206/article/details/8258166 SOA,全称small object al ...

  5. UEFI无法进入WIN10的系统?BIOS找不到ssd硬盘?reboot and select proper boot device的另一种解决思路

    项目场景: 我的笔记本是神船的,系统是win10,每年不给我来几次蓝屏.黑屏都不舒服. 今天小破本就突然来事了(突发的,只是刷刷B站而且正常关机,再打开就出问题了) 这个问题其实去年就出现呢过一次了! ...

  6. jmeter(二十二)内存溢出原因及解决方法

    jmeter(二十二)内存溢出原因及解决方法 参考文章: (1)jmeter(二十二)内存溢出原因及解决方法 (2)https://www.cnblogs.com/imyalost/p/7901064 ...

  7. java 二维数组内存溢出_程序员:学习心得,Java内存区域,内存溢出异常

    Java 内存区域 Heap 线程公有 存放实例对象 是GC主要管理区域,因此可以更细致的划分为:新生代.老年代 再细致一点划分:Eden区.From Survivor区.To Survivor区 内 ...

  8. 深入理解Java虚拟机(二)Java内存区域与内存溢出异常

    一.前言 对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄漏和内存溢出问题,看起来由虚拟机管理内存一切都很美好 ...

  9. 内存泄露、内存溢出以及解决方法

    目录(?)[+] 内存泄露是指程序在运行过程中动态申请的内存空间不再使用后没有及时释放,从而很可能导致应用程序内存无线增长.更广义的内存泄露包括未对系统的资源的及时释放,比如句柄等. 内存溢出即用户在 ...

最新文章

  1. Qt CheckBox的使用
  2. 【DP】奇怪汉诺塔(ybtoj DP-1-2)
  3. R语言在金融中的运用一
  4. springboot文件上传和下载工具_SpringBoot图文教程7—SpringBoot拦截器的使用姿势这都有...
  5. paramiko学习笔记
  6. MYSQL 数据库配置优化
  7. ubuntu安装git失败解决办法
  8. SSD硬盘,先不要用在Server上
  9. python学习-循环替换txt文件中的指定字符
  10. 计算机计算乘除法的原理
  11. 人工智能大战苹果缺席 保护用户隐私拖慢其步伐
  12. tortoise-orm连接多个数据库
  13. [ Tensorflow学习之路 ] —— API:TF-Slim
  14. 配置Cross-Origin的几种方法
  15. 聊聊技术专家谈阿里云史诗级故障
  16. 网络传真和传真服务器
  17. Java小农养成记第四十天
  18. word无响应或反应慢
  19. LInux下安装libreoffice(用于Linux下Word转pdf,附代码)
  20. CAD教程:CAD填充图案管理技巧

热门文章

  1. C语言中以12位输出是什么意思,c语言中“%nd”是什么意思?
  2. 无法同步谷歌日历_关于苹果iCloud备份 | 同步,你要了解这些!
  3. VUE知识要点总结思维导图
  4. PR各工具需要的数据结构总结
  5. 碰焊机触摸屏软件开发
  6. android attributeset,如何在android中以编程方式创建时传递AttributeSet
  7. 西部数码 php 伪静态,西部数码提供伪静态虚拟主机|linux虚拟主机伪静态URLREWRITE使用指南...
  8. Eclipse 中文语言包! 大家一起参与开贡献力量! 中国人不能总是拿来!
  9. 刚刚! 2019年区块链报告: 用小程序融资80亿! BAT、央行纳入计划
  10. MT from winter to spring, the spring has lasted till now.