C语言用于存储空间动态分配的函数
【摘要】 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)