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

标签 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);
}

最佳答案

  • 使用malloc() 时,不要强制转换返回值as said here
  • 您没有使用正确的尺码。在这里int *A = (int*)malloc(n*sizeof(int));malloc的大小是n*sizeof(int)。如果你想要两倍的大小,你应该用 n*sizeof(int)*2 而不是 2*sizeof(int) 调用 realloc() >
  • 处理 realloc() 失败。如果 realloc(A, new_size) 失败,A == NULL 并且您将发生内存泄漏。因此,使用不同的指针 B,检查 if (B != NULL),然后分配 A = B (old_size = new_size)。如果B == NULL处理分配失败

关于c - 在运行时使用 realloc 将数组大小加倍。我的代码正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44224107/

相关文章:

c - realloc 覆盖变量(Zynq SoC (Cortex A9) 上的 Xilinx SDK)

c++ - 如何让 IntelliSense 在 Visual Studio 2008 中可靠地工作

C:覆盖 Array2D 值在使用函数时不起作用

c - 为什么我在调用 realloc() 后得到模运算的浮点异常?

使用 char 的 realloc 的 C 动态分配**

c - Realloc 不复制旧数据

c - 在 C 中向字符串添加零

c - 尝试打印文件中的字符,但打印空白

c - 优化MEX文件以加速大型多维数组的乘法(代码瓶颈)

c - 我已经安装了 Cuda 6.5,但 OpenCV 给出了有关 Cuda 6.0 的错误