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

时间:2017-05-28 05:25:29

标签: c realloc

我不确定我是否正确使用了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);
}

2 个答案:

答案 0 :(得分:1)

  • 使用malloc()时,请不要投放返回值as said here
  • 您没有使用合适的尺寸。在此处int *A = (int*)malloc(n*sizeof(int));malloc的尺寸为n*sizeof(int)。如果您想要两倍的尺寸,则应使用realloc()代替n*sizeof(int)*2
  • 致电2*sizeof(int)
  • 处理realloc()失败。如果realloc(A, new_size)失败,A == NULL您将有内存泄漏。因此,使用不同的指针B,检查if (B != NULL)然后分配A = B(old_size = new_size)。如果B == NULL处理分配失败

答案 1 :(得分:1)

在这种情况下,在malloc之前将n加倍是很容易的,所以你没有使用realloc,因为你知道,你要加倍数组化。使用realloc可以减慢程序的工作速度,因为如果你把它做得更长,并且在当前分配的内存之后的地址不是空闲的,那么整个数组将被移动。你也可以按照我之前的建议更改最后一行。