#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr = (int *)malloc(10 * sizeof(int));
if (ptr == NULL) {
printf("内存分配失败\n");
return 1;
}
// 使用realloc调整空间大小为20个int类型元素
ptr = (int *)realloc(ptr, 20 * sizeof(int));
if (ptr == NULL) {
printf("内存重新分配失败\n");
return 1;
}
// realloc调用后原指针ptr的变化情况:
// 1. 如果realloc成功,ptr指向新分配的内存块(可能与原内存地址相同,也可能不同)。
// 2. 如果原内存块后有足够的连续内存空间满足新的大小需求,realloc会尝试在原内存块的基础上扩展,此时ptr的地址不变。
// 3. 如果原内存块后没有足够空间,realloc会分配一块新的足够大的内存块,将原内存块的内容复制到新内存块,然后释放原内存块,此时ptr指向新的内存块地址。
// 4. 如果realloc失败(例如系统没有足够内存),ptr将为NULL,原内存块保持不变(不会被释放)。
free(ptr);
return 0;
}