📅  最后修改于: 2023-12-03 14:49:51.221000             🧑  作者: Mango
realloc()
是C语言中的一个内存分配函数,用于调整之前使用malloc()
或calloc()
函数分配的内存块的大小。realloc()
函数的原型如下:
void* realloc(void* ptr, size_t size);
realloc()
函数接受两个参数:ptr
是指向之前分配的内存块的指针,size
是要调整的内存块的新大小(以字节为单位)。函数返回一个指针,指向调整大小后的内存块。
在使用realloc()
函数时,需要注意以下几点:
ptr
参数不能是NULL指针。如果ptr
是NULL指针,realloc()
的行为就类似于malloc()
函数,用于分配新的内存块。size
参数不能为0。如果size
为0,realloc()
的行为就类似于free()
函数,用于释放ptr
指向的内存块。realloc()
函数后,原有的内存块内容会被复制到新分配的内存块中,如果新分配的内存块比原内存块小,可能会发生数据丢失。realloc()
函数失败,会返回NULL指针。此时原有的内存块仍然有效,不能再被访问,应该考虑其他处理方式。下面是一个使用realloc()
函数的示例代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
// 分配一个初始大小为5的int数组
int* array = (int*)malloc(5 * sizeof(int));
// 初始数组内容为[0, 1, 2, 3, 4]
for (int i = 0; i < 5; i++) {
array[i] = i;
}
// 调整数组大小为10
int* resizedArray = (int*)realloc(array, 10 * sizeof(int));
if (resizedArray != NULL) {
// 调整大小成功,重新赋值10以后的元素
for (int i = 5; i < 10; i++) {
resizedArray[i] = i;
}
// 打印所有元素
for (int i = 0; i < 10; i++) {
printf("%d ", resizedArray[i]);
}
printf("\n");
// 释放内存
free(resizedArray);
} else {
printf("内存分配失败\n");
}
return 0;
}
在上述示例中,首先使用malloc()
函数分配了一个初始大小为5的int数组。然后,使用realloc()
函数将数组大小调整为10。重新分配的内存块中存储了原有数组的内容,并重新赋值10以后的元素。最后,打印所有元素并用free()
函数释放内存。
注意,示例代码中会检查realloc()
函数的返回值是否为NULL,以处理内存分配失败的情况。
realloc()
函数是C语言中用于调整内存块大小的重要函数。使用realloc()
可以根据需要增加或减少已分配内存块的大小。然而,在使用realloc()
时要注意参数的合法性以及对返回值进行判断,以确保应用程序的正确性和可靠性。