Я пытаюсь сохранить двумерный массив, заполненный с помощью функции, в глобальную память.Многие матрицы обрабатываются, и в случае успеха правильная матрица должна быть сохранена для доступа к многочисленным функциям.
В настоящее время матрица в функции динамически выделяется с помощью следующего кода:
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] =М [I] [J]).Я не уверен, что я делаю неправильно.
Я проверил, чтобы убедиться, что m и n имеют одинаковый размер для обоих массивов, и после того, как я закончу использовать матрицы, они освобождаются из памяти с помощью следующего кода:
for(i = 0; i < m; i++) {
free(M[i]);
}
free(M);