calloc()和realloc()的用法详解

本文详细介绍了calloc和realloc这两个C语言中的内存管理函数。calloc用于分配并初始化为0的一段连续内存,而realloc则用于调整已分配内存的大小。文章通过实例展示了两者在不同情况下的行为表现。

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

一、calloc()

        1.原型

        voidcalloc(size_t nmemb, size_t size);

        2.功能

        在内存动态存储区中分配nmemb块长度为size字节的连续区域。calloc自动将分配的内存  置0。

        3.参数

        nmemb:所需内存单元数量

        size:每个内存单元的大小(单位:字节)

        4.返回值:

        成功:分配空间的起始地址

        失败:NULL

        5.calloc()与malloc()的取别

 可以看见malloc()分配的内存空间里为随机数。

 calloc()会自动将分配的内存置0,这是与malloc的不同之处。

二、realloc

        1.原型

        voidrealloc(void *ptr, size_t size); 

        2.功能

        重新分配用malloc或者calloc函数在堆中分配内存空间的大小。

        realloc不会自动清理增加的内存,需要手动清理,如果指定的地址后面有连续的空间,那么就会在已有地址基础上增加内存,如果指定的地址后面没有空间,那么realloc会重新分配新的连续内存,把旧内存的值拷贝到新内存,同时释放旧内存。

        3.参数

        ptr:为之前用malloc或者calloc分配的内存地址,如果此参数等于NULL,那么和realloc与malloc功能一致

        size:为重新分配内存的大小, 单位:字节

        4.返回值

        成功:新分配的堆内存地址

        失败:NULL

        5.举例

 现在将原先的10个单元数量增加到11个,发现增加前和增加后的地址一样,这是因为如果指定的地址后面有连续的空间,那么就会在已有地址基础上增加内存。

 现在增加到20个,增加前后的地址不一样了,这是因为指定的地址后面没有空间,那么realloc会重新分配新的连续内存,把旧内存的值拷贝到新内存,同时释放旧内存。

现在又有了一个新问题,现在将原先内存中的值拷贝到新的内存,那这个新分配的内存中剩下的十个空间中的值是会给置0,还是随机值呢?

 很明显剩下的为随机值,所以如果开辟的比原先的大,后面多出来的空间并不会给置0。

如有错误,希望指正,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值