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

时间:2011-10-20 17:16:02

标签: c matrix malloc multidimensional-array

我正在尝试将使用函数填充的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);

1 个答案:

答案 0 :(得分:1)

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

int **M_save;

我使用以下内容在main中分配了它:

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

相反,我 应该使用

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