可以通过使用realloc()来更改动态分配的内存的大小。
根据C99标准:
void *realloc(void *ptr, size_t size);
realloc释放由ptr指向的旧对象,并返回指向具有由size指定的大小的新对象的指针。释放之前,新对象的内容与旧对象的内容相同,直到新大小和旧大小中的较小者为止。新对象中超出旧对象大小的任何字节都具有不确定的值。
需要注意的一点是, realloc()仅应用于动态分配的内存。如果未动态分配内存,则行为是不确定的。
例如,程序1演示不正确使用realloc(),程序2演示正确使用realloc()。
程序1:
#include
#include
int main()
{
int arr[2], i;
int *ptr = arr;
int *ptr_new;
arr[0] = 10;
arr[1] = 20;
// incorrect use of new_ptr: undefined behaviour
ptr_new = (int *)realloc(ptr, sizeof(int)*3);
*(ptr_new + 2) = 30;
for(i = 0; i < 3; i++)
printf("%d ", *(ptr_new + i));
getchar();
return 0;
}
输出:
未定义的行为
程式2:
#include
#include
int main()
{
int *ptr = (int *)malloc(sizeof(int)*2);
int i;
int *ptr_new;
*ptr = 10;
*(ptr + 1) = 20;
ptr_new = (int *)realloc(ptr, sizeof(int)*3);
*(ptr_new + 2) = 30;
for(i = 0; i < 3; i++)
printf("%d ", *(ptr_new + i));
getchar();
return 0;
}
输出:
10 20 30
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。