【发布时间】:2019-11-04 04:33:05
【问题描述】:
以下是我的代码,我无法弄清楚释放二维数组时哪里出错了。 我知道错误发生在这一行:free(arr[i]);而且我也知道我必须先执行此循环以释放每个整数,然后再释放整个数组。任何人都可以在这里发现错误吗?我没有遇到编译错误,但是一旦运行我的可执行文件,free 函数就会有大量的回溯输出。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int h = 4;
int w = 2;
int i, j;
int **arr = (int**)malloc(sizeof(int*) * h);
arr[0] = (int*)malloc(sizeof(int) * w * h);
for (i=1; i<h; i++)
{
arr[i] = arr[0] + (w*i);
}
int count = 0;
for (i=0; i<h; i++)
{
for (j=0; j<w; j++)
{
arr[i][j] = count++;
}
}
for (i=0; i<h; i++)
{
for (j=0; j<w; j++)
{
printf("Array[%d][%d] = %d ", i, j, arr[i][j]);
}
printf("\n");
}
for (i=0; i<h; i++)
{
free(arr[i]);
}
free(arr);
/*printf("\nAfter freeing the array it becomes:\n");
for (i=0; i<h; i++)
{
for (j=0; j<w; j++)
{
printf("Array[%d][%d] = %d ", i, j, arr[i][j]);
}
printf("\n");
}*/
}
【问题讨论】:
-
你打电话给
malloc两次但你打电话给free两次以上......他们必须匹配 -
你是说我在循环中多次调用 free 吗?我应该如何正确地做到这一点?在我在网上查看的所有其他地方都需要这个循环来释放每个整数
-
@camillesmith99 主人,他是 M,M,意味着你在循环中调用
free时不会在循环中调用任何mallocs。也就是说,代码部分看起来只是一个传真,没有掌握其底层逻辑。 -
在这部分代码中,我为 (i=1; i
-
谢谢,这有帮助。以我构建它的方式释放数组的正确方法是:free(arr[0]); //释放内层 free(arr); //为我调用的每个 malloc 释放外层 One?
标签: c arrays multidimensional-array c99