动态内存管理

本文介绍了C语言中的内存管理函数malloc、free、calloc和realloc,包括它们的功能、用法、返回值以及注意事项。重点讲述了动态内存的分配与释放,以及realloc用于调整内存大小的情况。
摘要由CSDN通过智能技术生成

malloc

void* malloc(size_t size)

在堆区上申请一块连续可用的空间,空间不会初始化。

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

返回值的类型是 void* ,malloc函数并不知道开辟空间的类型,具体在使⽤的时候使⽤者自己来决定。

int* p = (int*)malloc(5*sizeof(int));

free函数

void free(void* ptr)

申请的空间不想使用了,就需要释放空间,可以使用free函数释放。

free函数只能用来释放动态开辟的内存,不能对同一块动态内存多次释放,也不能只释放动态开辟内存的一部分。

如果参数ptr是空指针,则函数什么都不会做。

free过后需要给参数ptr赋值空指针。

如果没有使用free函数释放,在程序退出的时候也会由操作系统回收(最好手动用free函数释放内存)。

malloc函数和free函数声明在<stdlib.h>头文件中。

calloc

void* calloc(size_t num, size_t size)

申请一块num个大小为size的元素的空间,申请得到的空间默认初始化为0。

其功能和malloc相似。

realloc

vodi* realloc(viod* ptr, size_t size)
//ptr为要调整的内存地址
//size为扩容后总的空间大小,不是在原空间后追加的大小

realloc函数可以对动态开辟内存大小的调整。

返回的值为调整后的内存的起始位置。

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

情况1:原有空间之后有⾜够⼤的空间,在原空间后面直接追加空间,返回返回原来ptr的起始位置。

情况2:原有空间之后没有⾜够⼤的空间,在内存中找到一块新的且足够大小的空间,将旧的空间的内容拷贝到新的空间中,同时将旧的空间释放,返回新空间的起始地址。

如果扩容失败,则返回空指针NULL。

因此需要一个新的参数p来接收扩容后的空间,判定后不为空指针再赋值给ptr。赋值后不能使用free函数将参数p释放,只能将参数p指向空指针。

当realloc中传的参数为空指针时,其功能等价于malloc,可用来开辟一块连续的空间。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值