Ошибка сегментации при выводе графа - 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
, которое будет указывать на новый блок памяти с увеличенным размером.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д