【发布时间】: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