malloc/calloc/realloc区别与联系

malloc/calloc/realloc区别与联系

malloc/calloc/realloc和free介绍:

1 malloc函数

定义与声明: 在堆上,分配n个字节,并返回void指针类型。其函数声明如下:

void * malloc(int n);

参数释义:

n:申请空间大小(单个类型大小*总个数)//类型大小为字节

函数详述:

  • 函数返回值为void型指针。如果执行成功,函数从堆上获得n个字节的空间,并返回该空间的首地址。如果执行失败,函数返回NULL

  • 由于malloc函数值的类型为void型指针,因此,可以将其值类型转换后赋给任意类型指针,这样就可以通过操作该类型指针来操作从堆上获得的内存空间。

  • 需要注意的是,malloc函数分配得到的内存空间是未初始化的

注意:通过malloc函数得到的堆内存必须使用memset函数来初始化。

2 calloc函数

定义与声明: 在堆上,分配n * size个字节,并初始化为0,返回void *类型。其函数声明如下:

void *calloc(int n, int size);

参数释义:

size:单个类型大小

n:申请的个数

注意:最后申请空间大小为: n和size相乘

函数详述:

  • 函数返回值为void型指针。如果执行成功,函数从堆上获得size * n的字节空间,并返回该空间的首地址。如果执行失败,函数返回NULL

  • 该函数与malloc函数的不同是,calloc函数得到的内存空间是初始化的,其内容全为0

  • calloc函数适合为数组申请空间,可以将size设置为数组元素的空间长度,将n设置为数组的容量。

3 realloc函数

定义与声明: 重新分配堆上的void指针p所指的空间为n个字节,同时会复制原有内容到新分配的堆上存储空间。其函数声明如下:

void * realloc(void *p, int n);

参数释义:

  • p:堆上已经存在空间的地址

  • n:空间的大小

函数详述:

  • 其中,指针p必须为指向堆内存空间的指针,即由malloc函数、calloc函数或realloc函数分配空间的指针。

  • realloc函数将指针p指向的内存块的大小改变为n字节。如果n小于或等于p之前指向的空间大小,保持原有状态不变。如果n大于原来p之前指向的空间大小,系统将重新为p从堆上分配一块大小为n的内存空间,同时,将原来指向空间的内容依次复制到新的内存空间上,p之前指向的空间被释放。

  • relloc函数分配的空间也是未初始化的。

3 free函数

定义与声明: 释放void指针p所指的堆上的空间。

void free (void * p);

参数释义:

p:堆上已经存在空间的地址

函数详述:

  • 释放void指针p所指的堆上的空间。

注意:使用malloc函数,calloc函数和realloc函数分配的内存空间都要使用free函数或指针参数为NULL的realloc函数来释放


4 memset函数

定义与声明: 对于void指针p为首地址的n个字节,将其中的每个字节设置为a。

void * memset (void * p, int a, int n) ;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值