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

举报
yd_221104950 发表于 2020/12/04 00:26:22 2020/12/04
【摘要】 Linux操作系统提供 了三个用于存储空间(进程的堆空间)动态分配的函数和一个用于释放内存空间的函数。 malloc函数:给进程分配指定字节数的存储区,此存储中的初始值不为0,因此申请后要记得初始化一下。calloc函数:有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小,该空间的每一位都将被初始化为0。realloc函数:用于更...

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;


  
 
  • 1
  • 2
  • 3
  • 4

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

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

  
 
  • 1
  • 2
  • 3

calloc例子:


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


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

realloc例子:

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

  
 
  • 1
  • 2

free释放内存:

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

  
 
  • 1
  • 2
  • 3

谢谢阅读

文章来源: blog.csdn.net,作者:WongKyunban,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_40763897/article/details/88991877

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。