跳到主要内容

简述malloc、realloc、calloc 的区别 ?

参考答案:

mallocrealloccalloc都是C语言中用于内存管理的函数,但它们各自的功能和用法有所不同:

  1. malloc(内存分配):malloc函数用于在堆上分配指定大小的内存块。它接受一个参数,即要分配的字节数,并返回一个指向新分配内存的指针。如果内存分配成功,则返回非空指针;否则返回NULL。使用malloc分配的内存需要用free来释放,以避免内存泄漏。

示例:

int *ptr = (int *)malloc(sizeof(int) * 10);
  1. calloc(连续内存分配):calloc函数也用于在堆上分配内存,但与malloc不同的是,它接受两个参数:要分配的元素的数量和每个元素的大小。calloc会分配足够的内存来存储指定数量的元素,并将内存初始化为零。同样,返回的是一个指向新分配内存的指针,如果分配成功;否则返回NULL。同样,使用calloc分配的内存需要用free来释放。

示例:

int *ptr = (int *)calloc(10, sizeof(int));
  1. realloc(重新分配内存):realloc函数用于更改已分配内存块的大小。它接受两个参数:一个指向已分配内存的指针和新的内存大小。realloc会尝试调整内存块的大小以匹配新的请求,并返回指向新内存块的指针。如果调整大小成功,则原始内存块中的数据将被复制到新内存块中;否则,如果无法调整大小,则原始内存块保持不变,并返回NULL。需要注意的是,如果realloc函数能够缩小内存块的大小,它可能会将多余的内存释放回系统,因此,如果原始内存块中的数据仍然需要,则必须将其复制到新内存块中。

示例:

int *ptr = (int *)malloc(sizeof(int) * 5);
ptr = (int *)realloc(ptr, sizeof(int) * 10);

总之,malloccalloc用于分配内存,而realloc用于调整已分配内存块的大小。这些函数都是C语言标准库中的一部分,并提供了基本的内存管理功能。然而,在使用这些函数时,程序员需要确保正确地分配和释放内存,以避免内存泄漏和其他问题。