动态内存管理 柔性数组


在这里插入图片描述
最好先看
https://blog.csdn.net/qq_37891604/article/details/132820013

动态内存函数 malloc free

在这里插入图片描述
在这里插入图片描述

malloc
在这里插入图片描述
size要开辟的字节数,申请好空间后是把这段空间的起始地址给你,返回第一个字节的地址
在这里插入图片描述
动态内存申请可能失败(总共20的空间,你要申请300)
在这里插入图片描述
用完要释放
在这里插入图片描述

calloc

在这里插入图片描述
在这里插入图片描述

realloc 重新开辟空间

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

realloc 也可以第一个参数为NULL,则是直接开辟内存,类似于malloc用法

在这里插入图片描述

常见的动态内存错误

对空指针进行解引用操作

在这里插入图片描述
在这里插入图片描述

对开辟的内存越界访问

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
p不在指向动态开辟出来的内存的起始位置会出问题,p不走到最后,走到一半也不行
在这里插入图片描述
在这里插入图片描述
中间也不行
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

如何避免对同一块内存释放两次


在这里插入图片描述

动态开辟的内存忘记释放,内存泄漏

在这里插入图片描述

几个 经典笔试题

题目1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修改正确1
在这里插入图片描述
修改正确2
在这里插入图片描述

题目2

在这里插入图片描述
在这里插入图片描述
错误,不要返回栈区的地址
在这里插入图片描述
加static没事在全局区了
在这里插入图片描述
在这里插入图片描述

题目3

在这里插入图片描述
在这里插入图片描述
改正
在这里插入图片描述

题目4

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
改正
在这里插入图片描述

C++/C程序内存开辟

内核空间:留给内核使用的一段空间,内核态,4G的内存留2G给操作系统用
在这里插入图片描述

在这里插入图片描述

柔性数组

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

cpu的访问速度是超级快的,而内存的读写速度又比较慢,那怎么办呢?我们有一种方式就是把内存的数据放到高速缓存里,高速缓存放到寄存器里 ,当cpu每次处理数据的时候去寄存器里拿,效率就会快,寄存器找不到就去cache里找,cache里找不到就去内存里找,
在这里插入图片描述
这两种写法是一个意思,大小是位置的称为柔性数组成员,即数组的大小是可以调整的
在这里插入图片描述

包含柔性数组成员 的结构体大小计算

结构体的大小是不包含柔性数组的
在这里插入图片描述

柔性数组的使用

在这里插入图片描述
在这里插入图片描述
重新分配内存
在这里插入图片描述
在这里插入图片描述
第二种写法
在这里插入图片描述
也可以不malloc,直接创建个结构体变量,那就是在栈上了
在这里插入图片描述

动态通讯录


在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
改进
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ps不是malloc出来的不用释放
在这里插入图片描述

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值