当前位置: 首页 > news >正文

《重生到现代之从零开始的C语言生活》—— 动态内存管理

动态内存分配

我们在开辟内存的时候就是

int a =3;

这样

但是这样开的空间大小是固定的,且大小不能调整

但是如果我们用动态内存开辟的话,就可以自己申请和释放空间、

malloc

是C语言提供的一个开辟动态空间的函数

void* malloc (size_t size);//size是要开辟的内存,单位是是字节

开辟成功的话会返回一个开辟好空间的指针,如果开辟失败,则返回NULL

返回值是void*,是指针,返回类型由情况定,如果需要整型,就是int*

free

free函数是用来释放动态内存的

void free (void* ptr);//ptr是malloc返回的指针

malloc和free都声明在 stdlib.h 头⽂件中

calloc

calloc和malloc一样都是动态内存分配

void* calloc (size_t num, size_t size)//开辟num个大小为size字节的空间

他和malloc的区别就是calloc会把申请的字节初始化

realloc

realloc函数就是让动态内存管理更加的灵活,作用是更改动态内存空间的大小

void* realloc (void* ptr, size_t size)

ptr就是开辟的动态空间的指针,size就是调整后的新大小,返回的void*为调整后的起始位置

realloc在调整内存空间的是存在两种情况:

  • 情况1:原有空间之后有⾜够⼤的空间
  • 情况2:原有空间之后没有⾜够⼤的空间

情况一就是在后面直接追加空间,情况二及时找另外一个合适的空间用

常见的错误

对NULL指针解引用

当开辟动态空间失败返回NULL时,在对指针解引用就会报错

对动态内存的越界访问

动态内存的和我们开辟出来的常量一样,不能被越界访问,否则会报错

对非动态开辟内存使用free释放

free只能用于动态空间的释放,不能用于非动态开辟内存

使用free释放一块动态开辟内存的一部分

动态空间必须全部释放,不能只释放一部分

对同⼀块动态内存多次释放

一块动态内存只能被释放一次

动态开辟内存忘记释放

会导致内存泄漏

所以动态开辟的空间⼀定要释放,并且正确释放!!!


今天的知识讲解完啦,如果觉得有用可以点一下赞和关注,也可以先收藏以防需要时找不到哦,当然如果作者写的哪里有问题欢迎指出,我们一起进步!!!
祝看到这里的人天天开心哦(笔芯)

http://www.lryc.cn/news/457089.html

相关文章:

  • 四、Spring Boot集成Spring Security之登录登出业务逻辑
  • pipe和pipefd
  • 无人机之飞控仿真技术篇
  • Tetra Pak利乐触摸屏维修beijer北尔触摸屏维修E1151
  • Python_网络编程(IP 端口 协议)
  • Adobe Acrobat提示“3D数据解析错误”
  • 红帽7—Mysql路由部署
  • LLM4Rec最新工作: 字节发布用于序列推荐的分层大模型HLLM
  • 怎么高效对接SaaS平台数据?
  • Spark算子使用-Map,FlatMap,Filter,diatinct,groupBy,sortBy
  • CSS响应式布局
  • AI大模型书籍丨掌握 LLM 和 RAG 技术,这本大模型小鸟书值得一看!
  • Mysql和Oracle使用差异和主观感受
  • 【Java】—— File类与IO流:File类的实例化与常用方法
  • C++设计模式——装饰器模式
  • C#使用ITextSharp生成PDF文件实例详解
  • 10.9QT对话框以及QT的事件机制处理
  • SiLM266x系列SiLM2661高压电池组前端充/放电高边NFET驱动器 为电池系统保护提供可靠性和设计灵活性
  • linux中sed命令详解
  • vue 模板语法
  • bladex漏洞思路总结
  • 解决SqlServer自增主键使用MybatisPlus批量插入报错问题
  • leetcode:反转字符串中的单词III
  • 深度学习常见问题
  • 神经网络的一些benchmark示例
  • 如何进行统级架构设计
  • 鼓组编写:SsdSample鼓映射 GM Map 自动保存 互换midi位置 风格模板 逻辑编辑器
  • 使用YOLOv11进行视频目标检测
  • DEEP和DeepBook V3将于10月14日推出
  • 学习之高阶编程列表推导式,字典推导式