構造体へのポインターの配列に情報を格納しています。つまり、配列の各要素は、リンクされたリストへのポインターです。
配列の長さが分からないので、main() 関数で配列を初期化する代わりに、ダブル ポインターを初期化します。
struct graph** graph_array;
次に、配列の長さを取得したら、関数 GraphInitialize を使用して、graph_array の各要素を初期化しようとします。
int GraphInitialize(struct graph* *graph_array,int vertices)
{
struct graph* graph_array2[vertices+1];
graph_array = graph_array2;
int i;
for (i=0;i<vertices+1;i++)
{
graph_array[i] = NULL;
}
return 0;
}
しかし、何らかの理由で、これは更新されたgraph_arrayをmain()に返していません。基本的に、この関数は graph_array をローカルで更新しており、変更は行われていません。その結果、graph_array の要素にアクセスしようとすると、初期化されていないため、エラーが発生します。私は何を間違っていますか?
編集: Tom Ahh との対話に続いて、これをさらに混乱させる何かを追加する必要があります。
main() から直接 GraphIntialize を呼び出しません。代わりに、以下に示すように、main から getdata() を呼び出し、graph_array へのポインターを getdata に渡します。
getdata(argc, argv, vertpt, edgept, &graph_array)
int getdata(int argc, char *argv[], int *verts, int *edges, struct graph* **graph_array)
次に、getdata は入力ファイルから頂点の数を取得し、それを使用して GraphInitialize を呼び出します。
if ((GraphInitialize(&graph_array, *verts)) == -1)
{
printf("GraphCreate failed");
return 0;
}
これにより、次のエラーが発生します。