0

我正在尝试使用邻接列表来表示图形,但我遇到了指针问题。

typedef struct vertex{
    int num;
    struct vertex *next;
} Vertex;

Vertex *adj[10];

void build(){
    Vertex *v=NULL;
    Vertex *t=NULL;
    v = malloc(1*sizeof(*v));

    v->num = 1;
    adj[0] = v;  //NODE with value 1
    t = v;

    v = malloc(1*sizeof(*v));
    v->num = 1;
    t->next = v; // ANOTHER NODE but it should be the SAME NODE with the above one
    t = v;

    //v = malloc(1*sizeof(*v));
    //v->num = 1;
    //t->next = adj[0]; // causes infinite loop...
    //t = v;

    v = malloc(1*sizeof(*v));
    v->num = 2;
    t->next = v;
    t = v;
}

我正在尝试构建的实际上很简单。1 --> 1,2 。但是我写的代码不起作用。可能是什么问题呢?

编辑:好的,我更正了NULL。预期的输出是 1 -->> 1,2 。具有 2 个节点 1 的图指向自身和值为 2 的下一个节点。我的问题是当我在获取列表 1 --> 1,2 后创建图时;看起来我有 3 个不同的节点。我的意思是稍后当我将节点的值从 1 更改为 3 时,我得到 3 --> 1,2 但由于我应该只有 2 个节点,所以在我进行更改后所需的输出应该是 3 --> 3,2。

4

2 回答 2

2
t = NULL;       
v = malloc(1*sizeof(*v));    
v->num = 2;     
t->next = v;    //This is basically dereferencing a NULL pointer

t在将其设置为NULL导致Undefined Behavior后,您正在取消引用。

另外,您应该告诉我们:
预期的输出是什么?
你得到的输出是什么?

如果没有这些信息,除了向您指出明显的使用错误外,很难判断您做错了什么。

于 2011-12-14T11:57:54.530 回答
1

t在几个地方乱扔垃圾。特别是t = v;,您在其他任何地方都没有原始值。

于 2011-12-14T11:56:28.437 回答