简述malloc、realloc、calloc 的区别 ?
参考答案:
malloc
、realloc
和calloc
都是C语言中用于内存管理的函数,但它们各自的功能和用法有所不同:
malloc
(内存分配):malloc
函数用于在堆上分配指定大小的内存块。它接受一个参数,即要分配的字节数,并返回一个指向新分配内存的指针。如果内存分配成功,则返回非空指针;否则返回NULL。使用malloc
分配的内存需要用free
来释放,以避免内存泄漏。
示例:
int *ptr = (int *)malloc(sizeof(int) * 10);
calloc
(连续内存分配):calloc
函数也用于在堆上分配内存,但与malloc
不同的是,它接受两个参数:要分配的元素的数量和每个元素的大小。calloc
会分配足够的内存来存储指定数量的元素,并将内存初始化为零。同样,返回的是一个指向新分配内存的指针,如果分配成功;否则返回NULL。同样,使用calloc
分配的内存需要用free
来释放。
示例:
int *ptr = (int *)calloc(10, sizeof(int));
realloc
(重新分配内存):realloc
函数用于更改已分配内存块的大小。它接受两个参数:一个指向已分配内存的指针和新的内存大小。realloc
会尝试调整内存块的大小以匹配新的请求,并返回指向新内存块的指针。如果调整大小成功,则原始内存块中的数据将被复制到新内存块中;否则,如果无法调整大小,则原始内存块保持不变,并返回NULL。需要注意的是,如果realloc
函数能够缩小内存块的大小,它可能会将多余的内存释放回系统,因此,如果原始内存块中的数据仍然需要,则必须将其复制到新内存块中。
示例:
int *ptr = (int *)malloc(sizeof(int) * 5);
ptr = (int *)realloc(ptr, sizeof(int) * 10);
总之,malloc
和calloc
用于分配内存,而realloc
用于调整已分配内存块的大小。这些函数都是C语言标准库中的一部分,并提供了基本的内存管理功能。然而,在使用这些函数时,程序员需要确保正确地分配和释放内存,以避免内存泄漏和其他问题。