Ошибка сегментации при выводе графа - C (СИ)
Формулировка задачи:
Вечер добрый, г-да программисты! Ниже приведены фрагменты из программы, описывающей и выводящей граф.
В начале программы динамически выделяю память под две числовые матрицы и один массив указателей на структуры:
Далее, необходимо перераспределить память, что я осуществил таким образом:
Функция ClearGraph призвана почистить структуру и обнулить массивы MI и MS, но дает ошибку
в 4 строке на операторе присваивания MI[i][j] = 0. Собственно, вопрос: где я дурак?
Листинг программы
- MS = (int**) malloc(sizeof(int*)*N);
- MI = (int**) malloc(sizeof(int*)*e);
- hole = (lnk*) malloc(sizeof(lnk)*N);
- for (i=0; i<N; i++){
- MS[i] = (int*) calloc(N, sizeof(int));
- hole[i]=NULL;
- }
- for (i=0; i<e; i++)
- MI[i] = (int*) calloc(N, sizeof(int));
Листинг программы
- MS = (int**) realloc(MS, sizeof(int*)*N);
- MI = (int**) realloc(MI, sizeof(int*)*e);
- hole = (lnk*) realloc(hole, sizeof(lnk)*N);
- for (i=0; i<N; i++){
- MS[i] = (int*) realloc(MS[i], N*sizeof(int));
- }
- for (i=0; i<e; i++)
- MI[i] = (int*) realloc(MI[i], N*sizeof(int));
- ClearGraph(hole, MI, MS, N, e);
Листинг программы
- //отрывок из функции ClearGraph
- for (i=0; i<e; i++)
- for (j=0; j<N; j++)
- MI[i][j] = 0;
Решение задачи: «Ошибка сегментации при выводе графа»
textual
Листинг программы
- MI = (int**) realloc(MI, sizeof(int*)*e);
Объяснение кода листинга программы
В данном коде выполняется следующая последовательность действий:
- Переменная
MI
объявлена какint**
, что означает, что она является двумерным массивом целых чисел. - Используется оператор
realloc
для изменения размера памяти, выделенной под переменнуюMI
. В данном случае, размер памяти увеличивается на величину нового размера, рассчитанного какsizeof(int*)*e
, гдеe
- это некоторый индекс. - Результатом выполнения оператора
realloc
является новое значение переменнойMI
, которое будет указывать на новый блок памяти с увеличенным размером.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д