calloc是一个C语言函数
函数名: calloc
功 能: 在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。
跟 malloc的区别: calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。
用 法: void *calloc(unsigned n,unsigned size);
头文件:stdlib.h 或malloc.h 相关函数:malloc 、realloc 、free
编辑本段 应用举例
程序例1
#include <stdlib.h>
#include<string.h>
#include <stdio.h>
int main(void)
{
char *str = NULL; /* 分配内存空间 */
str = (char*)calloc(10, sizeof(char)); /* 将hello写入*/
strcpy(str, "Hello"); /*显示变量内容*/
printf("String is %s\n", str);
/* 释放空间 */ free(str);
return 0;
}
程序例2
从这个例子可以看出calloc分配完存储空间后将元素初始化。
#include<stdio.h>
#include<stdlib.h>
int main(void)
{ int i;
int *pn=(int *)calloc(10,sizeof(int));
for(i=0;i<10;i++)
printf("%3d",*pn++);
printf("\n");
free(pn);
return 0;
}
输出十个0。
malloc
函数原型: extern void *malloc(unsigned int num_bytes);
函数描述: 分配长度为 num_bytes 字节的内存块
入口参数: num_bytes 内存块的大小(单位为字节)
出口参数: 无(或为空)
返回值: 如果分配成功则返回指向被分配内存的指针,否则返回空指针 NULL 。
函数说明 不再使用时一定要记得释放,调用函数 free
使用示例:
char *pTemp = NULL;
pTemp = (char *)malloc(10 * sizeof(char));
个人理解:
[1] 申请空间大小时,利用 sizeof 做出计算,这样保证会分配正确数量的内存空间;
[2]malloc 返回的内存是没有被初始化的,所以可能包含着任何的随机垃圾,应该在其后马上调用 memset 函数进行初始化为 0 的操作;
calloc
函数原型: void *calloc(size_t nelem, size_t elsize);
函数描述: 分配指定长度的内存空间
入口参数: nelem 元素的个数(如为 10 个 char 申请空间,则为 10 )
elsize 元素所占用的字节(如为 char 申请,则为 sizeof(char) )
出口参数: 无(或为空)
返回值: 如果分配成功则返回指向被分配内存的指针,否则返回空指针 NULL 。
函数说明 不再使用时一定要记得释放,调用函数 free
使用示例:
char *str = NULL;
str = calloc(10, sizeof(char));
个人理解:
[1]calloc 实际上也只能算作是 malloc 的一种简单的封装;
[2] 它会自动的把动态分配的内存进行清 0 操作,并且保证了分配数量的正确,所以建议使用。
malloc 函数有一个将可用的内存块连接为一个长长的列表的所谓空闲链表
calloc 返回的是一组对象的数组,而 malloc 返回的是一个对象。使用 calloc 表明是要使用一个数组.