【问题标题】:Save 2D Dynamic Array (Matrix) for Global Access c保存 2D 动态数组(矩阵)以供全局访问 c
【发布时间】:2011-10-20 17:16:01
【问题描述】:

我正在尝试将使用函数填充的二维数组保存到全局内存。处理了许多矩阵,成功后,需要保存正确的矩阵以访问众多函数。

目前,函数内的矩阵是动态分配的,代码如下:

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);

【问题讨论】:

  • 你不能做一个M_save = M吗?
  • 我不相信您可以使用 C 以这种方式将完整的数组相互分配。要复制值,您必须遍历数组并保存每个值。
  • 但它不是数组,@milbert,它实际上是一个指针。

标签: c matrix malloc multidimensional-array


【解决方案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));

【讨论】:

    猜你喜欢
    • 2016-03-31
    • 2016-09-12
    • 1970-01-01
    • 2014-01-23
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    相关资源
    最近更新 更多