C语言中内存函数的运用

文章详细介绍了C语言中用于内存管理的四个关键函数:malloc用于动态分配内存,calloc提供初始化为零的内存分配,free负责释放内存,而realloc则用于调整已分配内存的大小。malloc和calloc的区别在于内存初始化,realloc可能涉及原地或异地扩容,并需要注意扩容失败的情况。所有这些函数都涉及到堆区的管理,正确使用它们对于避免内存泄漏至关重要。
摘要由CSDN通过智能技术生成

内存函数就是对内存操作的函数,包含四个函数,并且四个函数都是作用于堆区

  1. malloc函数和free函数

(void*)malloc(所需空间大小)

malloc就是向内存申请一块空间,空间的内容是随机值,空间的大小是根据你填入括号中的数字大小决定,单位是字节,而返回的指针就是所申请空间的起始位置,但是由于返回的指针是(void*)类型,所以我们接受指针时需要将指针强制类型转化为我们所需要的类型。但如果开辟空间失败,将返回空指针,所以一般情况下,我们需要对返回的指针进行判断。并且malloc开辟的空间是一块连续的空间。

使用示例

对于这块空间而言,如果不主动进行回收,就会在程序结束后还给操作系统,而一般情况下,我们需要在使用完这块空间后就主动还给系统,此时就需要使用free函数,free函数就是将空间释放(将原本内存的值再次赋成随机值,但是再通过指针访问会产生越界访问)。但是由于free函数不会将指针赋为0指针,所以我们要主动将指针置为空防止越界访问(free只会释放动态开辟的空间)。

free(所要释放空间的指针)

使用示例

总结

两个函数的头文件都是<stdlib.h>。

2.calloc函数

calloc函数与malloc函数相似,区别是后者直接传你所需要的空间,前者是先传入所需类型的个数,后传入所需类型的字节,并且calloc函数是将返回的空间内容置0,而malloc不会,所以前者的效率低于后者。calloc(元素个数,元素大小)。

头文件也为<stdlib.h>。

  1. realloc函数的使用

realloc函数就是将malloc函数和calloc函数开辟的空间再次进行调整(扩大),realloc函数如果扩容失败会返回空指针,如果成功会返回空间起始地址(void*)类型,而传入的参数是调整后的总空间。

(void*)realloc(原空间的起始地址,调整后的总空间)。

而扩容的方式有原地扩容和异地扩容,当指针后面的空间的大小小于所需的大小,就会产生异地扩容,会在堆区找一块足够大小的空间,在将原来的数据移到现在的空间,将原来的空间释放,返回现在空间起始地址的指针。原地扩容是原地址后面空间的大小大于所要扩容的空间,就直接在原来空间处扩容,返回原来空间的起始地址指针。

但由于可能存在扩容失败的情况,所以最好不要使用原来的地址接受,可以增加一个新指针来接收,判断新指针不是空指针后再进行将值赋为原指针。不然直接用原指针接受后可能使得指针变为空,使数据丢失。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值