函数简介
函数名: calloc
功 能: 在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。
跟malloc的区别:
calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。
用 法: void *calloc(unsigned n,unsigned size);
头文件:stdlib.h或malloc.h
应用举例
程序例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=calloc(10,sizeof(int));
for(i=0;i<10;i++)
printf("%3d",*pn++);
printf("/n");
free(pn);
return 0;
}
输出十个0。
malloc,calloc,realloc等内存分配函数区别
三个函数的声明分别是:
void* realloc(void* ptr, unsigned newsize);
void* malloc(unsigned size);
void* calloc(size_t nelem, size_t elsize);
都在stdlib.h函数库内
它们的返回值都是请求系统分配的地址,如果请求失败就返回NULL
malloc用于申请一段新的地址,参数size为需要内存空间的长度,如:
char* p;
p=(char*)malloc(20);
calloc与malloc相似,参数elsize 为申请地址的单位元素长度,nelem为元素个数,如:
char* p;
p=(char*)calloc(20, sizeof(char));
这个例子与上一个效果相同
realloc是给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址长度如:
char* p;
p=(char*)malloc(sizeof(char)*20);
p=(char*)realloc(p,sizeof(char)*40);
注意,这里的空间长度都是以字节为单位。
C语言的标准内存分配函数:malloc,calloc,realloc等。
malloc与calloc的区别为1块与n块的区别:
malloc调用形式为(类型*)malloc(size):在内存的动态存储区中分配一块长度为“size”字节的连续区域,返回该区域的首地址。
calloc调用形式为(类型*)calloc(n,size):在内存的动态存储区中分配n块长度为“size”字节的连续区域, 每一位都初始化为零,返回首地址。
realloc调用形式为(类型*)realloc(*ptr,size):将ptr内存大小增大到size。
free的调用形式为free(void*ptr):释放ptr所指向的一块内存空间。
C++中为new/delete函数。