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