面试题答案
一键面试功能
- malloc:分配指定字节数的内存空间,但不对内存进行初始化,里面的值是随机的。
- calloc:分配指定数量且指定大小的内存空间,并将分配的内存空间初始化为0。
参数
- malloc:只有一个参数,即要分配的内存字节数。例如
malloc(size_t size)
。 - calloc:有两个参数,第一个参数是要分配的元素数量,第二个参数是每个元素的大小。例如
calloc(size_t nmemb, size_t size)
。
返回值
- malloc:成功时返回指向分配内存起始地址的指针,失败时返回
NULL
。 - calloc:成功时返回指向分配内存起始地址的指针,失败时返回
NULL
。
内存初始化
- malloc:不初始化内存,内存中保留原有数据(如果之前这块内存被使用过)。
- calloc:将分配的内存全部初始化为0。
适合使用calloc的场景举例
在需要初始化数组的场景下,适合使用calloc
。比如要创建一个存放学生成绩的整数数组,并且希望所有成绩初始值为0时:
#include <stdio.h>
#include <stdlib.h>
int main() {
int num_students = 10;
// 使用calloc分配内存并初始化为0
int *scores = (int *)calloc(num_students, sizeof(int));
if (scores == NULL) {
printf("内存分配失败\n");
return 1;
}
// 使用数组
for (int i = 0; i < num_students; i++) {
printf("scores[%d] = %d\n", i, scores[i]);
}
free(scores);
return 0;
}
在这个例子中,如果使用malloc
,数组元素的值将是未定义的,而calloc
确保了所有元素初始值为0,适合这种需要初始化的场景。