首页 > 解决方案 > 如何在 C 中释放 2D 数组内存

问题描述

我正在尝试为 2D 数组分配内存。但是当我试图释放内存时,它会引发分段错误。请帮助我知道我做错了什么?

  int **arr1 = (int **) malloc (rows * columns * sizeof (int));

  //Array Access:
  for (i = 0; i < rows; i++)
    for (j = 0; j < columns; j++)
      *(arr1 + i * columns + j) = ++count;

  for (i = 0; i < rows; i++)
    for (j = 0; j < columns; j++)
      printf ("%d", *(arr1 + i * columns + j));

  for (i = 0; i < rows*columns; i++)
    free (arr1[i]);

标签: carrayspointersheap-memory

解决方案


看起来您正在尝试分配指向数组的指针数组。您的代码段错误,因为您free未分配内存。分配“二维数组”的正确方法更像是这样:

int **arr1 = malloc (rows * sizeof (int*));

for (int r = 0; r < rows; r++)
  arr1[r] = malloc(columns * sizeof(int));

...

for (int r = 0; r < rows; r++)
  free(arr1[r]);

free(arr1);

推荐阅读