了解动态内存管理函数

一、malloc申请堆区空间

malloc在堆区申请的空间不进行初始化

申请成功返回void*指针,申请失败返回空指针“NULL”

用指针来接收malloc返回的地址,并且可以用指针或者数组方式访问修改malloc申请的空间的内容,接收malloc返回的地址时需要进行强制转换对应自己需要的类型指针,接收之后判断是否为空,以确保是否申请成功,再之后可以进行内容修改,在此遵循规则使用不越界访问不造成非法访问

使用完之后释放并且把用来接收的指针置为空指针“NULL”,以防指针变为野指针

二、calloc申请堆区空间

calloc在堆区申请的空间会进行初始化为0

申请成功返回void*指针,申请失败返回空指针“NULL”

与malloc一样,强转为自己需要的类型指针并且用一个指针接收,在使用过程中需要一直保持着申请空间的首地址以便后续释放,并且遵循规则不越界访问不造成非法访问

使用完整之后释放空间并把指针置为空指针“NULL”或者指向其他有效区域,这个规则在malloc、calloc与realloc上一致,以防不释放造成内存泄漏或者释放之后再次使用造成非法访问,因为释放完后堆区的空间可能会篡改内容

三、realloc调整申请堆区空间大小

realloc可以调整malloc与calloc申请空间的大小

realloc函数第一个参数是之前在堆区申请空间的首地址,第二个参数是调整之后的大小,当第一个参数为空指针“NULL”时,效果和malloc一样在堆区申请一片空间,所以用realloc扩大申请的空间时后面的空间不进行初始化

realloc调整空间有两个可能性

realloc调整之后的空间,无论是在后面接上开辟还是新开一片地方开辟,内容不会变化,空间变大内容还是存在,空间变小则会截断后面一些内容

如果开辟失败则返回空指针“NULL”,所以在使用realloc时需要用新的指针来接收地址,以防开辟失败把之前指向的空间地址丢失

使用完之后释放“free”,并且置为空指针,和以上内容原因一样

四、free释放堆区申请的空间

free“释放”只能用于malloc、calloc与realloc在堆区开辟的空间进行释放

如果使用free释放的不是堆区开辟的空间,代码则会死机

如果使用free释放空指针“NULL”,则free什么也不做,所以不用怕多次释放接收堆区地址的指针

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值