malloc、calloc、与realloc

三者都是动态内存分配的函数,返回值都是void*,指向的是内存空间的地址;

malloc(空间大小)参数代表所需开辟空间的字节数,接收时最好将其强制类型转换为接收的类型:
int* p= (int*)malloc(10*sizeof(int));
开辟10个整数大小的空间
由于剩余空间不确定,所以开辟空间有失败的可能,开辟失败时返回值为NULL,所以每次开辟后必须检查是否成功
使用完空间后需要使用free函数将其释放掉,并初始化p:
free(p);
p=NULL;

calloc的作用是开辟空间并初始化为0,其参数也有所不同:
calloc(元素个数,每个元素的大小)
例:int* p=(int*)calloc(10,sizeof(int))
开辟10个整数空间并初始化为0;
calloc使用也需要检查是否成功、用完后释放空间

realloc的作用是改变已开辟动态内存空间的大小,且保留原来内存中的数据;
realloc(已开辟空间的指针,改成多少字节)
例:int* ptr=realloc(p,100);
由于realloc加大空间时可能会与其他文件使用的空间冲突,所以realloc有时会新开辟一块空间,地址与原地址不同,且可能会开辟失败,失败会返回NULL,若直接用原来的指针p接收,开辟失败会导致原来的数据地址丢失,所以需要先判断是否成功,再用原指针接收
例:
int* ptr=realloc(p,40);
if(ptr!=NULL)

p=ptr;

此函数同样需要手动释放内存空间

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值