Ошибка сегментации возникает из-за ошибки в методе выделения 2D-массива, как это было сделано в следующей строке:
G->Adj=malloc((G->V)*(G->V)*sizeof(int));
.
, которая фактически выделяла 1D-буфериз (G-> V) * (G-> V) целых чисел, поэтому он не может включить более поздний доступ в синтаксисе 2D, как вы хотите
В двух словах: при выделении 2D-массива, как вы хотитеВы должны сначала выделить 1D массив указателей.В вашем коде должно быть:
G->Adj = (int **)malloc(sizeof(int *)*G->V);
И затем выделите векторы G-> V для указателя:
for(i=0; i < G->V; i++)
{
G->Adj[i] = (int *)malloc(sizeof(int)*G->V);
}
Кроме того, хорошей практикой является проверкарезультат выделения не равен NULL (ошибка malloc), для каждого выделения
для общего объяснения распределения векторов c вы можете прочитать больше в Метод 2: «все еще можно использовать синтаксис [r] [c] дляaccess "way
Кроме того, в конце вашей программы отсутствует освобождение памяти, поэтому вы должны добавлять вызовы free () в обратном порядке (векторы, а затем указатели)