用calloc()函数分配内存
在<stdlib.h>头文件中声明的calloc()函数与malloc()函数相比有两个优点。第一,它把内存分配为给定大小的数组,第二,它初始化了所分配的内存,所有的位都是0。calloc()函数需要两个参数:数组的元素个数和数组元素占用的字节数,这两个参数的类型都是size_t。该函数也不知道数组元素的类型,所以所分配区域的地址返回为void *类型。
下面的语句使用calloc()为包含75个int元素的数组分配内存:
int *pNumber = (int *) calloc(75, sizeof(int)); |
如果不能分配所请求的内存,返回值就是NULL,也可以检查分配内存的结果,这非常类似于malloc(),但calloc()分配的内存区域都会初始化为0。
将程序7.11改为使用calloc()代替malloc()来分配需要的内存,只需修改一条语句,如下面的粗体显示,其他代码不变:
/* Allocate sufficient memory to store the number of primes required */ primes = (unsigned long *)calloc(total, sizeof(unsigned long)); if (primes == NULL) { printf("\nNot enough memory. Hasta la Vista, baby.\n"); return 1; } |