2012-03-09 10 views
1

自分のリンクリストを作成中です。私は別のリンクされたリストの頭と尾を指す2つのnode_iteratorsを取る、私のリンクリストのオーバーロードされたコンストラクタを作成しようとしています。リストのコンストラクタオーバーロードされたリンクされたリストコンストラクタで、無効なポインタのエラーを返すノードイテレータがある

headtail

template <typename T> 
list<T>::list(node_iterator<T> front, node_iterator<T> back) 
{ 
    unsigned temp; 
    this->head = front.get_current(); 
    while(front != back) 
    { 
     ++temp; 
     ++front; 
    } 
    this->tail = back.get_current(); 
    this->used = temp; 

} 

は、リスト内の私のノードにnode<T>*です。私が作成したfrontback node_iteratorsです。 get_current()メソッドは、node_iteratorクラスが指す現在のノードにnode<T>*を返します。私はnode_iteratorクラスのオーバーロードされた++!=オペレータをテストしています。しかし時には、上記コンストラクタで私のリストクラスを作成しようとすると、私は次のエラーを取得する:

*** glibc detected *** ./a.out: munmap_chunk(): invalid pointer: 0xbf91b1a4 ***

私はこの問題を解決するか、より良い形で上記の操作を行うことができる方法上の任意のヒント?もっと見る必要がある場合はお知らせください。

+0

なぜ別のリストの頭と尾を取るコンストラクタが必要なのですか?これらの値は、クラスのプライベートメンバーであり、呼び出しスコープからはアクセスできないはずです。 –

+1

始めに、 'temp'は決して初期化されません。 – jogojapan

+0

私はまっすぐなデバッグセッションは、ここに与えられた推測作業よりもあなたにそれを教えてくれると思います。あなたはデバッガを使いましたか?クラッシュはどのラインで起こりますか?さて、「temp」は初期化されていません(少なくともここではクラッシャーではありません)。 –

答えて

1

tempは決して初期化されません。私はそれがthis->usedは、いくつかのランダムな値で終わる、行方不明= 0の結果

unsigned temp = 0; 

されている必要がありますね。私は後で(実際にはコンストラクタ内ではなく)コード内のある時間を推測するが、これはクラッシュを引き起こす。

+0

これは私の多くの問題の1つでした。それをキャッチしていただきありがとうございます。 –

関連する問題