📅  最后修改于: 2023-12-03 14:47:02.292000             🧑  作者: Mango
realloc
函数是 C 语言中的一个标准库函数,用于修改已分配内存块的大小。
void *realloc(void *ptr, size_t size);
其中,ptr
是指向已分配内存的指针,size
是需要重新分配的内存块大小。
realloc
函数可以完成以下功能:
ptr
是 NULL
指针,则相当于调用 malloc(size)
函数,即分配一个新的内存块并返回指向该内存块的指针。size
的值为 0,则相当于调用 free(ptr)
函数,即释放 ptr
指向的内存块,并返回一个 NULL
指针。size
的值大于原先分配的内存块的大小,则会重新分配一个更大的内存块,然后将原先的数据拷贝到新的内存块中,并返回指向新内存块的指针。size
的值小于等于原先分配的内存块的大小,则会保留原先的内存块,返回指向原先内存块的指针。realloc
函数前必须要使用 malloc
或 calloc
函数分配内存。realloc
函数返回 NULL
指针,则说明分配内存失败,原先的内存块仍然可用。#include <stdio.h>
#include <stdlib.h>
int main() {
int* ptr;
int size1 = 4, size2 = 6;
ptr = (int*) malloc(size1 * sizeof(int));
for (int i = 0; i < size1; i++) {
ptr[i] = i;
}
for (int i = 0; i < size1; i++) {
printf("%d ", ptr[i]);
}
printf("\n");
ptr = (int*) realloc(ptr, size2 * sizeof(int));
for (int i = size1; i < size2; i++) {
ptr[i] = i;
}
for (int i = 0; i < size2; i++) {
printf("%d ", ptr[i]);
}
printf("\n");
free(ptr);
return 0;
}
这段示例代码分配了一个大小为 4
的整型数组,然后重新分配了一个大小为 6
的数组,并将原先数组中的数据拷贝到新的内存块中。