c - 如何在 C 中释放二维数组内存

标签 c arrays pointers heap-memory

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

  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]);

最佳答案

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

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);

关于c - 如何在 C 中释放二维数组内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53466491/

相关文章:

C# 将 char 和 char 数组分配给字符串?

C:帮助理解指针

c - 是否有一个例子说明何时需要空指针才能在 C 中正确执行程序?

c - 如何在 C 中将 uint32 转换为 uint64?

ios - 将json作为字符串保存到核心数据并使用字符串创建对象数组

c - 单片机上的uart软件阅读——代码理解

java - 如何根据文件中的数据类型将 CSV 文件读入 2 个 ArrayList?

c++ - C++代码说明

c - C 中不带 float 的定点数

c - 字符串和无限循环中的堆栈粉碎