【发布时间】:2011-02-04 23:48:51
【问题描述】:
我以前玩过 Graphs,在 StackOverflow 的帮助下我管理得很好,但我从未使用过像下面这样的结构。我似乎无法理解我在这里做错了什么......
#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;
}
我在(*g[i])->next = NULL; 的第一次迭代中遇到了分段错误,我不明白为什么。我已经尝试了无数的事情,但我似乎无法用这种结构管理 Graph 初始化。另外,我声明和返回指向 Graph 的指针的方式是否适合这个结构?
我是在 init 函数中使用大量指针使事情复杂化还是什么?
P.S:请不要提出不同的结构定义,我无法更改上述结构中的任何内容。这才是真正的问题。我知道如何使用 Graphs 滚动我自己的结构,但我需要使用上面的那个。
【问题讨论】:
-
您是否尝试过使用调试器?我不确定
g是如何分配的。 -
是的,这就是我意识到它在第一次迭代时中断的原因,因为我虽然后来中断了,可能是因为我没有分配足够的内存。但是我发现 GDB 很混乱,我不知道如何正确使用它。
标签: c pointers graph initialization structure