保存二维动态数组(矩阵)为全局访问c



我试图保存使用函数填充到全局内存的2D数组。许多矩阵被处理,成功后,需要保存正确的矩阵以访问许多函数。

目前,函数中的矩阵是用以下代码动态分配的:

int **M = malloc(m * sizeof(int *));
for(i = 0; i < m; i++)
    M[i] = malloc(n * sizeof(int));

我声明了一个全局变量(int **M_save)。在主程序中,当需要保存矩阵时,使用相同的过程初始化全局数组:

**M_save = malloc(m * sizeof(int *));
for (i = 0; i < m; i++)
    M_save[i] = malloc(n * sizeof(int));

然后通知函数在释放其内存之前需要保存矩阵,并在函数中使用以下过程进行保存:

if(saveMatrix == 1) {
for(i = 0; i < m; i++) {
    for(j = 0; j < n; j++) {
        M_save[i][j] = M[i][j];
    }
}

}

当运行程序时,当值被复制时,我收到一个分段错误(M_save[I][j] = M[I][j])。我不知道我做错了什么。

我检查了确保m和n对于两个数组的大小相同,并且在我完成使用矩阵之后,它们将通过以下代码从内存中释放:

for(i = 0; i < m; i++) {
    free(M[i]);
}
free(M);

解决方案非常简单。矩阵全局定义为

int **M_save;

我在main中使用以下命令分配了它:

**M_save = malloc(m * sizeof(int *));
for (i = 0; i < m; i++)
    M_save[i] = malloc(n * sizeof(int));

I 应该使用

M_save = malloc(m * sizeof(int *));
for (i = 0; i < m; i++)
    M_save[i] = malloc(n * sizeof(int));

相关内容

  • 没有找到相关文章

最新更新