gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:04:29 25 4
gpt4 key购买 nike

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

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

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

关于c - 保存二维动态数组(矩阵)用于全局访问 c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7839637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com