c语言中calloc函数 c语言中malloc函数的用法

C语言calloc函数

calloc函数的功能与malloc函数的功能相似,都是从堆分配内存。

成都创新互联主要从事网站制作、成都做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务南城,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108

函数名: calloc

函数原型:void *calloc(int n,int size);

功 能: 函数返回值为void型指针。如果执行成功,函数从堆上获得size X n的字节空间,并返回该空间的首地址。如果执行失败,函数返回NULL。该函数与malloc函数的一个显著不同时是,calloc函数得到的内存空间是经过初始化的,其内容全为0。calloc函数适合为数组申请空间,可以将size设置为数组元素的空间长度,将n设置为数组的容量。

示例代码:

#include stdio.h

#include stdlib.h

#define SIZE 5

int main()

{

int * p=NULL;

int i=0;

//为p从堆上分配SIZE个int型空间

p=(int *)calloc(SIZE,sizeof(int));

if(NULL==p){

printf("Error in calloc.\n");

return -1;

}

//为p指向的SIZE个int型空间赋值

for(i=0;iSIZE;i++)

p[i]=i;

//输出各个空间的值

for(i=0;iSIZE;i++)

printf("p[%d]=%d\n",i,p[i]);

free(p);

p=NULL;

return 0;

}

malloc()和calloc()有啥区别

malloc()和calloc()的区别:

malloc()和calloc()的功能都是在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针。

而他们之间的区别就是calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。比如说在内存中分配长度为10的int类型的数组,若使用的是函数calloc(),则数组被初始化为10个0,若是使用malloc()函数,则数组里面存的是垃圾数据。

扩展资料:

malloc()在内存中分配内存的工作机制:

malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。

调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。

然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。

接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上。调用free函数时,它将用户释放的内存块连接到空闲链上。

到最后,空闲链会被切成很多的小内存片段,如果这时用户申请一个大的内存片段,那么空闲链上可能没有可以满足用户要求的片段了。

于是,malloc函数请求延时,并开始在空闲链上翻箱倒柜地检查各内存片段,对它们进行整理,将相邻的小空闲块合并成较大的内存块。

如果无法获得符合要求的内存块,malloc函数会返回NULL指针,因此在调用malloc动态申请内存块时,一定要进行返回值的判断。

参考资料:

百度百科-malloc()

百度百科-calloc()

C语言中malloc()和calloc()有什么区别?

这是申请内存的函数,存在与头文件stdlib.h中,malloc的使用方法最简单接下来是例子:

#includestdlib.h

#includestdio.h

main()

{

int

*m;

m=(int

*)malloc(sizeof(int)*16);//这里每次在使用malloc的时候前面要加一个强制类型转换,转换到你需要的类型,后面的括号内就是申请的大小,我这例子是申请的16个整数型大小内存代表这个m可以当数组用了

m[11]=8899;

printf("%d",m[11]);

free(m);//记得每次申请后都需要释放内存,不然会造成浪费影响计算机运行速度

}

calloc是申请后自动将申请的内存全都初始化为0

举个例子:

#includestdio.h

#includestdlib.h

main()

{

int

*m;

m=(int

*)calloc(16,sizeof(int));//是不是感觉差不多就是把*改成了,而已

printf("%d",m[10]);//这个肯定是0

free(m);

}

将他们的原型放在这里void

*malloc(int

size);

void

*calloc(int

number,int

size);

size代表大小,number代表个数

C语言calloc的用法?

void *calloc(size_t nobj, size_t size);calloc函数为由nobj个长度为size的对象组成的数组分配内存,并返回指向分配区域的指针;若无法满足要求,则返回NULL。该空间的初始长度为0字节

void *malloc(size_t size);malloc函数为长度size的对象分配内存,并返回指向分配区域的指针;若无法满足要求,则返回NULL。该函数不对分配的内存区域进行初始化。

void *realloc(void *p, size_t size);realloc函数将p指向的对象的长度修改为size个字节。如果新分配的内存比原来内存大,则内存的内容保持不变,增加的空间不进行初始化。如果新分配的内存比原来的内存小,则分配内存单元不初始化,realloc函数返回指向新分配空间的指针;若无法满足要求,则返回NULL。在这种情况下,原来指针p指向的单元内容保持不变。

str = (char*)calloc(10,sizeof(char));是什么意思?

是分配10个大小为char,也就是十个字节的内存给str,地址类型是char指针

什么是c语言里面的动态存储分配函数啊?

动态内存分配即分配内存大小在运行时才确定,一般在堆中分配。

C语言动态内存分配相关的函数如下几个:malloc、calloc、realloc、free;

malloc函数的使用比较直接,一个成功的malloc调用返回分配的size大小的内存的指针。失败时返回NULL并将错误代码置为ENOMEM。

calloc函数可以分配nr个size大小的内存空间,一般用于一组struct结构体的分配。

realloc函数将ptr指向的内存空间重新分配大小为size并返回新的内存首地址。

free函数释放前三个函数申请的内存空间,所以,使用前三个分配函数分配的内存一定要free掉。


文章名称:c语言中calloc函数 c语言中malloc函数的用法
当前地址:http://cdiso.cn/article/docedip.html

其他资讯