我将我的信息存储在指向结构的指针数组中。换句话说,数组的每个元素都是一个指向链表的指针。
我不知道数组应该有多长,所以不是在我的 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;
}
但问题是:我不直接从 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;
}
这会导致错误:“预期的'struct graph 3ASTERISKS(三重指针)'但参数的类型是'struct graph 4ASTERISKS(四重指针)'。这太令人困惑了。如果有办法我可以解决这个问题而不需要所有这些指针可能是最好的答案,但我正在尝试创建和抽象数据类型,所以我不想在我的主函数中创建一个 graph_array 数组。