我有一个任务是用 C 编写一个 Graph ADT,它实现了运行广度优先搜索。当我调用 Graph 析构函数时,我得到:分段错误(核心转储)。
Graph ADT 使用列表数组来表示相邻顶点。数组中的元素编号与该顶点的数字标签相同。
Graph ADT 有 3 个数组字段,颜色、距离和父级。在每个数组的第 i 个元素中,顶点的数字标签和存储在该索引处的数据要么是颜色的表示(对于 BFS),要么是与 BFS 中使用的源顶点的距离,要么是该顶点的直接父节点顶点。这些数组中的每一个都按如下方式初始化:
G->color = calloc(n+1, sizeof(int));
'n' 是 G 中的 a 顶点数。
这是我尝试为析构函数实现的内容:
void freeGraph(GraphRef* pG){
int i;
int n = getOrder(*pG) /* the number of vertices in pG */
for(i = 1; i <=n; i++){
freeList((*pG)->adj[i]); /*free the list containing i's adjacent vertices*/
}
free((*pG)->color);
free((*pG)->distance);
free((*pG)->parent);
*pG = NULL;
}
我不确定我做错了什么。任何建议将不胜感激!