c - 如何在 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]);
解决方案
看起来您正在尝试分配指向数组的指针数组。您的代码段错误,因为您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);
推荐阅读
- java - Spring JpaRepository 不会删除表中的行
- javascript - 响应式网页:关闭时可见的响应式导航菜单
- r - 为什么 read_csv 的结果比 read.csv 的大?
- sql - 插入sql后如何获取json中的返回值?
- reactjs - 异步函数不等待返回的数据将操作分派给减速器
- python - Python TypeError:“模块”对象不支持项目分配
- sql - id只有一个日期
- mailchimp-api-v3.0 - 从自定义 mailchimp 表单中删除字段
- c++ - 更大<>与更大之间的区别
与 C++ 中的更大<>()与更大()? - python - 有没有办法获得存储过程签名?