私はグラフを扱っています。エッジのリストにエッジを挿入したいとき、ポインターに問題があります。
これはすべてのグラフ構造です:
typedef struct _edge {
int source;
int dest;
int cost;
struct _edge *next;
} edge;
typedef struct {
int id;
rama *edges; /* List of edges */
} node;
typedef struct {
int n_nodes;
int n_edges;
int directed;
node *nodes; /* Array of nodes */
} graph;
私の問題は、エッジのリストに新しいエッジを挿入しようとすると発生します...
int insert_edge(graph *g, int source, int dest, int cost){
edge *e;
edge *nxt;
e=(edge*)malloc(sizeof(edge));
e->source=source;
e->dest=dest;
e->cost=cost;
e->next=NULL;
nxt=g->nodes[source].edges;
if(nxt==NULL)
nxt=e;
else
{
while(nxt->next!=NULL)
nxt=nxt->next;
nxt->next=e;
}
return 1;
}
メイン関数から insert_edge を呼び出すと、エッジのフィールドにアクセスしようとするとセグメンテーション違反が発生します。
どうすれば正しく挿入できますか?
graph->nodes[position].edges にアクセスすると、まだ null です...挿入関数内のグラフのコンテンツを更新する方法がわかりません。