1

我正在处理图表。当我想在边列表中插入边时,我遇到了指针问题。

这是所有的图结构:

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 时,它仍然为空......我不知道如何在我的插入函数中更新图表的内容。

4

1 回答 1

3
        nxt=nxt>next; 

这个错字基本上使您将 0/1 分配给nxt,然后您将其视为指针。

(PS 我几乎可以肯定编译器为它提供了警告,可以节省您的宝贵时间)。


另一个问题是 withnxt=e;而不是g->nodes[source].edges = e.
在第一个 - 您只是更改局部变量,但实际上并没有更改数据。

于 2013-10-17T09:48:24.420 回答