MST
星途 面试题库

面试题:C语言中calloc函数与malloc函数的区别

请详细阐述C语言中calloc函数和malloc函数在功能、参数、返回值以及对内存初始化方面有哪些不同之处,并举例说明在何种场景下更适合使用calloc函数。
27.7万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

功能

  • 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,适合这种需要初始化的场景。