📜  使用realloc()

📅  最后修改于: 2021-05-25 19:49:15             🧑  作者: Mango

可以通过使用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基础课程》。