Сохранить 2D динамический массив (матрицу) для глобального доступа c - PullRequest
1 голос
/ 20 октября 2011

Я пытаюсь сохранить двумерный массив, заполненный с помощью функции, в глобальную память.Многие матрицы обрабатываются, и в случае успеха правильная матрица должна быть сохранена для доступа к многочисленным функциям.

В настоящее время матрица в функции динамически выделяется с помощью следующего кода:

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

1 Ответ

1 голос
/ 21 октября 2011

Решение оказалось очень простым. Матрица была определена глобально как

int **M_save;

Мне присвоили его в основном, используя следующее:

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