在运行时使用 realloc 将数组大小加倍。我的代码正确吗?

Using realloc to double an arrays size during runtime. Is my code correct?

我不确定我是否正确使用了 realloc 函数。

在我的程序中,我首先询问用户数组的大小并使用 malloc 为其分配内存,然后用一些值对其进行初始化。

然后我想使用 realloc 将同一个数组的大小扩大两倍。这是我的代码。我是否使用 realloc 来正确调整 int *A 的大小?

#include <stdio.h>
#include <stdlib.h>

int main(){
  int n;
  printf("Enter size of array\n");
  scanf("%d", &n);

  int *A = (int*)malloc(n*sizeof(int));     //dynamically allocated array
  for (int i = 0; i < n; i++)               //assign values to allocated memory
  { 
    A[i] = i + 1;
  }

  A = (int*)realloc(A, 2*sizeof(int));     //make the array twice the size
  free(A);
}
  • 使用 malloc() 时,不要转换 return 值 as said here
  • 您使用的尺寸不正确。这里int *A = (int*)malloc(n*sizeof(int));malloc的大小是n*sizeof(int)。如果你想要两倍的大小,你应该用 n*sizeof(int)*2 调用 realloc() 而不是 2*sizeof(int)
  • 处理 realloc() 失败。万一 realloc(A, new_size) 失败, A == NULL 并且您将发生内存泄漏。因此,使用不同的指针 B,检查 if (B != NULL),然后分配 A = B (old_size = new_size)。如果B == NULL处理分配失败

在这种情况下,在 malloc 之前将 n 加倍更容易,因此您无需使用 realloc,因为您知道,您将加倍数组大小。使用 realloc 会减慢程序的运行速度,因为如果你让它变长,并且当前分配的内存之后的地址不是空闲的,那么整个数组将被移动。您还按照我之前的建议更改了最后一行。