讲了个知识点3:动态内存的开辟

我们目前只知道创建变量和创建数组去开辟空间。

但是我们今天来学4个函数,分别是:malloc、free、calloc、realloc.

1.malloc、free

这个就是它的格式:

在这里插入图片描述
malloc开辟的空间实在堆区上的。
在这里插入图片描述
如果我们的malloc函数开辟空间失败了,那么我们返回的就是NULL
那么我们开辟了内存之后是怎么回收的呢?
1、程序结束的时候,会自动回收。
2、手动回收。
手动回收利用free()
在这里插入图片描述
但是,当我们释放了我们创建的动态内存块之后,假设我们用一个指针变量来接收这个动态内存了:
在这里插入图片描述
在这里插入图片描述
大家可以看到P仍然记录了我们释放的内存块的地址。这是很危险的。
所以我们把P置成空指针。
在这里插入图片描述
在这里插入图片描述
是用了置为空指针之后,可以看到P指针,存的地址才会变。
在使用malloc的时候,最好和free成对使用。
free释放的空间必须是动态开辟的,否则是没有作用的。如果free的内容是空指针,那么free什么都不做。
free必须要释放全部的内存块,不能只释放开辟的内存块的一部分,free(“起始位置地址”)。

不要对同一块空间多次释放,一块动态开辟的内存块只能释放一次。

不能忘记释放,会出现内存泄漏。浪费内存。

malloc申请的空间里面,默认放的是随机值.


2.calloc

calloc会开辟一块空间, 还会初始化成0。开辟失败也会返回空指针。

在这里插入图片描述


3.realloc

当我们开的动态内存不够用的时候,我们就用realloc增扩空间。realloc只会扩增,不会初始化扩增的空间。扩增失败也会返回空指针。

在这里插入图片描述
realloc扩空间的时候,如果后面的空间不够大,会重新开辟一块空间 ,还会把原来内存的数据拿到新的空间里。如果空间够大,就在后面直接开空间。在这里插入图片描述
realloc的返回值可能是新地址,所以我们最好单独创建一个指针来接收返回值。
如果realloc的第一个参数给的是空指针,那么就会帮你重新开一个空间。和calloc的格式一样,但功能和malloc的一样

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值