malloc()、calloc()与realloc()详解

1、malloc()

       使用方法:

void *malloc(size_t size);
void free(void *ptr);
        malloc()函数有一个size_t的参数size,表示需要分配size字节大小的内存,返回值是一个void类型的指向内存分配的首地址,如果分配失败,返回NULL。void*表示无类型指针,在使用的时候可以转换为任何类型的指针。

       注意:malloc()函数返回的是分配内存的首地址,由于指针的值是可以改变的,所以在使用时不要改变这个指针的值,比如ptr++,这样的操作会使得free失败。

       而且malloc()是与free()配合使用的,C++中是new与delete配合使用的,切记不可混淆。

2、calloc()

       calloc()用于向应用程序分配内存,定义如下:

void *calloc(size_t nmemb, size_t size);
       参数nmemb表示要分配的元素个数,参数size表示每个元素的大小,分配的内存空间大小为 nmemb*size;返回void类型的指针,指向内存的首地址。

       malloc()函数与calloc()函数最大的区别在于,malloc()函数分配内存空间后不能初始化内存空间,而calloc()函数在分配内存空间后可以初始化新分配的内存。malloc()函数分配的空间可能是原来未使用过,内存值为0,;如果malloc()函数分配的空间曾经被使用过,则内存值不全为0。所以为了保证内存数据的有效性,需要手动将内存区域重置为0。

       用法一:

int *p_mem=(int*)calloc(1024, sizeof(int));
//分配1024*sizeof(int)字节大小的内存,并清空为0

       用法二:

int *p_mem=(int*)malloc(1024*sizeof(int));
//分配1024*sizeof(int)字节大小的内存
memset(p_mem,0,1024*sizeof(int));
//将分配的空间手动置0
       用法一中使用calloc()函数初始化内存会根据分配内存空间每一位都初始化为0,如果分配的内存是指针类型,则初始化为空指针NULL。而用法二使用memset()函数填充的值全为0,但不能保证生成有用的空指针或浮点0值。
3、realloc()
        realloc()函数用于重新分配正在使用的一块内存大小,定义如下:

void *realloc(void *ptr, size_t size);
        realloc()函数可以调整ptr所指向的内存空间的大小。既可以扩大内存,也可以缩小。需要注意的是,如果缩小空间,则被缩小空间的数据将会丢失。

int *p_mem=(int*)malloc(1024);   //分配1024字节大小内存
p_mem=(int*)realloc(2048);   //重新分配2048字节大小的内存
        注意: realloc()函数调整后的内存空间起始地址有可能与原来不同。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值