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 . しかし、私が書いたコードは機能しませんでした。何が問題なのですか?

編集済み: OK、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

Undefined Behaviorを引き起こすtように設定した後、逆参照しています。NULL

また、次のことを教えてください:
期待される出力は何ですか?
あなたが得ている出力は何ですか?

その情報がなければ、明らかな使用上の誤りを指摘する以外に、何が間違っているのかを判断するのは困難です。

于 2011-12-14T11:57:54.530 に答える
1

あなたはtいくつかの場所でゴミを捨てています。特に のt = v;場合、元の値は他にありません。

于 2011-12-14T11:56:28.437 に答える