为全局访问保存2D动态数组(矩阵)c
我正在尝试将使用函数填充的2D数组保存到全局内存中。 处理了许多矩阵,并且在成功时,需要保存正确的Matrix以访问许多function。
目前,函数中的矩阵是使用以下代码动态分配的:
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));
相反,我应该一直在使用
M_save = malloc(m * sizeof(int *)); for (i = 0; i < m; i++) M_save[i] = malloc(n * sizeof(int));