私は以前Graphでプレイしていましたが、StackOverflowの助けを借りてそれを正しく管理しましたが、以下のような構造は使用しませんでした。私は(*g[i])->next = NULL;
の最初の反復にセグメンテーションフォールトを取得し、私は理由を理解することはできませんCで隣接リストを持つ配列に基づいてグラフを初期化する際の問題
#include "stdio.h"
#include "stdlib.h"
#define MaxV 100
#define MaxE 50
typedef struct edge {
int dest;
int cost;
struct edge *next;
} Edge, *Graph[MaxV];
Graph *initGraph() {
Graph *g = (Graph*)malloc(sizeof(Edge) * MaxV);
for(int i = 0; i < MaxV; i++)
(*g[i])->next = NULL;
return g;
}
int main(void) {
Graph *g = initGraph();
for(int i = 0; i < MaxV; i++) {
if((*g[i])->next == NULL) printf("[%02d] NULL\n", i);
}
return 0;
}
...私はここで間違ってやっているのか理解できないようです。私は無数のものを試しましたが、私はそのような構造でグラフの初期化を管理することはできません。また、私は宣言し、グラフへのポインタを返す方法は、この構造のための正しい方法を行っている?
私はinit関数の中にたくさんのポインタを入れたり、何を複雑にしていますか?
P.S:異なる構造定義を提案しないでください。私は上記のものを変更することはできません。それが本当の問題です。グラフを使って自分の構造を動かす方法を知っていますが、上記のものを使う必要があります。
デバッガを試しましたか?私は 'g 'がどのように割り当てられているのかよくわかりません。 – Argote
はい、それは最初の反復で私がそれが後で壊れていたにもかかわらず、おそらく私が十分なメモリを割り当てなかったために壊れていたことに気付いたのです。しかし、私はGDBが混乱していると私はそれを正しく使用する方法を知らない。 –