malloc、calloc、realloc区别

本文深入探讨了C语言中的动态内存管理,详细对比了malloc、calloc与realloc三种方法的异同。malloc用于分配指定大小的内存块,calloc则初始化为零并允许指定元素数量和大小,realloc用于调整已分配内存的大小。所有方法返回值均为void*类型,需强制转换,且申请的内存位于堆区,使用完毕需调用free释放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学习C语言时我们学习动态内存管理,涉及到了三种方法,现在来看看他们之间的区别吧。

相同点
malloc、calloc、realloc都是动态内存管理的库函数,它们申请的空间都在堆上,并且使用完毕后必须用free来进行释放。返回值类型都是void*,并且接受返回地址时必须要进行强转。例如:int* s = (int)* malloc(20)。

不同点
malloc: void malloc(size_t size)
返回值类型是void*,在接受返回的地址空间时必须进行强转。
申请成功:返回的是空间首地址
申请失败:返回NULL
参数:申请空间所占的内存字节数。
申请的空间在堆上,使用完毕后要用free来进行释放。

calloc:void *calloc(size_t nmemb, size_t size)
返回值和malloc一致。
参数列表:参数一表示元素个数,参数二表示单个元素的大小。

realloc: void *realloc(void *ptr, size_t size)
realloc所代表的意思是将ptr所指向的空间大小调整到size字节。
如果说ptr指向的是空,该函数就相当于malloc函数。
假设:ptr所指向的空间总共占old个字节
size <= old:将ptr所指向的空间缩小到size个字节–>直接返回ptr所指向的空间的首地址。
size > old:将ptr所指向的空间扩增到size个字节(大一点:直接返回原空间的首地址;大的多的多:需要申请新空间,将旧空间中的元素拷贝到新空间中,释放旧空间,返回新空间的首地址)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值