realloc
是 C 语言标准库中的一个函数,用于调整已分配内存块的大小。其原型如下:
void* realloc(void* ptr, size_t size);
ptr
:指向要重新分配的内存块的指针。size
:新的内存大小(以字节为单位)。realloc
允许在运行时动态调整内存大小,这在处理不确定数据量时非常有用。realloc
可能会返回一个指向新分配内存的指针,并释放多余的内存。realloc
主要有以下几种使用类型:
realloc
可能会移动内存块。realloc
常用于以下场景:
realloc
来调整数组大小。realloc
的指针为空,而 size
不为零,realloc
会分配一个新的内存块并返回其地址,但不会释放原来的内存。realloc
可能会返回 NULL
,但不会释放原来的内存。realloc
的指针指向无效内存,结果是未定义的。#include <stdio.h>
#include <stdlib.h>
int main() {
int* arr = NULL;
size_t size = 5;
// 初始分配内存
arr = malloc(size * sizeof(int));
if (arr == NULL) {
perror("Failed to allocate memory");
return 1;
}
// 使用 realloc 扩大内存
size_t new_size = 10;
int* new_arr = realloc(arr, new_size * sizeof(int));
if (new_arr == NULL) {
perror("Failed to reallocate memory");
free(arr); // 释放原来的内存
return 1;
}
arr = new_arr;
// 使用新分配的内存
for (size_t i = 5; i < new_size; ++i) {
arr[i] = i;
}
// 打印数组
for (size_t i = 0; i < new_size; ++i) {
printf("%d ", arr[i]);
}
printf("\n");
// 释放内存
free(arr);
return 0;
}
通过以上方法,可以有效避免 realloc
产生未定义行为的问题。
领取专属 10元无门槛券
手把手带您无忧上云