关于malloc calloc realloc的用法

关于三个函数的定义:

void* realloc(void* ptr, unsigned newsize);

void* malloc(unsigned size);

void* calloc(size_t nelem, size_t elsize);

都在stdlib.h函数库内。

1.对于malloc函数,是分配size大小的空间,由于是void * ,所以分配好后要在前面加上你需要用的类型,如

       char *p = (char *) malloc(256*sizeof(int));

   这里有个注意点就是,malloc分配的空间并没有清零过,所以,这些空间中原来有什么,还是有什么,分配好后要注意清空。

2.对于calloc函数,它的用法与malloc一样,只是这里的参数的意思是这样的,分配nelem块elsize大小的空间,当然用的时候也要指定你需要的类型,如

      char *p = (char *) calloc(10, 256*sizeof(int));

      当然,这nelem块内存单位是相邻的,这里比malloc多了一个优点就是,calloc分配后的空间是清0过的。

3.对于realloc函数,它分配后的空间地址不能保证不变,因此realloc的操作有些不一样,如

      char *p = (char *) realloc(p, old_size + new_size);这里对p再分配空间的地址必须赋值给p,由于realloc是在堆上进行空间分配的,它会重新找到一块空间为要求的old_size+new_size大小的空间返回,因此可能地址不是原来的p指向的地址了,要重新把返回的地址赋值给p,这里当realloc第一个参数为0时,相当于重新用malloc分配old_size+new_size大小的空间给p,并且都清0了。当第一个参数不为0时,如果空间不够old_size+new_size的话,也就是分配失败,那么,保持原来的空间位置和大小不变。当然如果第一个参数不是NULL,而第二个参数是0的话,这里就会产生游离指针了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值