構造体へのポインターの配列に情報を格納しています。つまり、配列の各要素は、リンクされたリストへのポインターです。
配列の長さが分からないので、main() 関数で配列を初期化する代わりに、ダブル ポインターを初期化します。
struct graph** graph_array;
次に、配列の長さを取得したら、関数 GraphInitialize を使用して、graph_array の各要素を初期化しようとします。
int GraphInitialize(struct graph ***graph_array, int vertices)
{
*graph_array = malloc(sizeof **graph_array * vertices);
if (*graph_array)
{
int i;
for (i = 0; i < vertices; i++)
{
(*graph_array)[i] = NULL; // parentheses matter here!
}
}
else
{
return -1;
}
return 0;
}
しかし、ここに問題があります。私は、GraphIntialize を main() から直接呼び出していません。代わりに、まず 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;
}
これにより、次のエラーが発生します。これらのポインターが最良の答えかもしれませんが、データ型を作成して抽象化しようとしているため、メイン関数でgraph_array配列を作成したくありません。