我正在使用图表。当我想在边缘列表中插入边时,我的指针有问题。
这是所有图形结构:
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;
}
当我从main函数调用insert_edge时,当我尝试访问边缘的字段时,我遇到了分段错误。
如何正确插入?
当我访问我的图表 - >节点[position] .edges它仍然是空的...我不知道如何在插入函数中更新图形的内容。
答案 0 :(得分:3)
nxt=nxt>next;
这个拼写错误基本上会让你将0/1分配给nxt
,之后你会把它当成一个指针。
(PS我几乎可以肯定编译器提供了警告,可以节省宝贵的时间)。
另一个问题是nxt=e;
而不是g->nodes[source].edges = e
。
在第一个 - 你只是改变局部变量,但实际上并没有改变数据。