C语言用于存储空间动态分配的函数

Linux操作系统提供 了三个用于存储空间(进程的堆空间)动态分配的函数和一个用于释放内存空间的函数。

  • malloc函数:给进程分配指定字节数的存储区,此存储中的初始值不为0,因此申请后要记得初始化一下。
  • calloc函数:有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小,该空间的每一位都将被初始化为0。
  • realloc函数:用于更改以前分配 区的长度(可以增加,也可以减少)。当为增加长度 时,可能需要 将以前分配 区间的内容迁移到另一个足够大的区域,在尾部提供增加的存储区,而新增加的区间内的初始化值是不确定的。
  • free函数:用于释放由malloc、realloc、calloc分配的存储空间,这些空间会被送入系统的可用存储区池,可以被以上三个函数再次分配。

上面四个函数的头文件是:stdlib.h

void *malloc (size_t __size)返回一个指向分配空间的指针,如果返回NULL,说明没有可用内存了
void *calloc (size_t __nmemb, size_t __size)每一位会被初始化为0
void *realloc (void *__ptr, size_t __size)增加或减少申请的内存
void free (void *__ptr)释放上面三个函数申请的内存

malloc例子:

malloc只管分配内存,并不能对其进行初始化,所以得到的一片新内存中,其值将是随机的。一般意义上:我们习惯性的将其初始化为0。当然,也可以用memset函数的。

  int *p;
  p = (int *)malloc(sizeof(int));
  *p = 0;

用memset来初始化,memset函数在string.h头文件里

 int *a;
        a = (int *)malloc(sizeof(int));
        memset(a,0,sizeof(int));

calloc例子:


 int *s;
 s = (int *)calloc(5,sizeof(int));
 memset(s,0,5*sizeof(int));
 printf("%d\n",*s);

realloc例子:

   s = (int *)realloc(s,4*sizeof(int));
   printf("%d\n",*s);

free释放内存:

free(p);
free(a);
free(s);

谢谢阅读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值