2011-12-14 13 views
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。しかし、私が書いたコードはうまくいかなかった。何が問題なの?

EDITED:OK、NULLを修正しました。 予想される出力は1 - >> 1,2です。 2つのノード1が自分自身と次の値2のノードを指すグラフ。 リストを取得した後にグラフを作成すると、問題が発生します。私は3つの異なるノードがあるように見えます。後で私がノードの値を1から3に変更すると、3 - > 1,2が得られますが、2つのノードしか持たないので、その変更を行った後、望ましい出力は3 - > 3,2になるはずです。

+0

tをvに設定した後にtをNULLに設定しています。 – wildplasser

+0

質問の根拠を完全に変更すべきではありません。代わりに回答を受け入れ、別のフォローアップ質問を提出してください。その後、完全なコードを追加します。 – moooeeeep

+0

それから、重複の可能性があると文句を言う可能性があります:( – thetux4

答えて

1

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

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

あなたは未定義の動作を引き起こしNULLにそれを設定した後tを逆参照されています。

また、私たちに連絡する必要があります。
期待される出力は何ですか?
取得している出力は何ですか?

この情報がないと、間違っていることを明示するのは難しいですが、明白な使用上の誤りを指摘することはできません。

+0

「基本的に」?私はそれが大変だと思います。修飾子は必要ありません:) –

+0

私は質問を編集しました。 – thetux4

関連する問題