自分のリンクリストを作成中です。私は別のリンクされたリストの頭と尾を指す2つのnode_iteratorsを取る、私のリンクリストのオーバーロードされたコンストラクタを作成しようとしています。リストのコンストラクタオーバーロードされたリンクされたリストコンストラクタで、無効なポインタのエラーを返すノードイテレータがある
:head
とtail
上
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>*
です。私が作成したfront
とback
node_iteratorsです。 get_current()
メソッドは、node_iterator
クラスが指す現在のノードにnode<T>*
を返します。私はnode_iterator
クラスのオーバーロードされた++
と!=
オペレータをテストしています。しかし時には、上記コンストラクタで私のリストクラスを作成しようとすると、私は次のエラーを取得する:
*** glibc detected *** ./a.out: munmap_chunk(): invalid pointer: 0xbf91b1a4 ***
私はこの問題を解決するか、より良い形で上記の操作を行うことができる方法上の任意のヒント?もっと見る必要がある場合はお知らせください。
なぜ別のリストの頭と尾を取るコンストラクタが必要なのですか?これらの値は、クラスのプライベートメンバーであり、呼び出しスコープからはアクセスできないはずです。 –
始めに、 'temp'は決して初期化されません。 – jogojapan
私はまっすぐなデバッグセッションは、ここに与えられた推測作業よりもあなたにそれを教えてくれると思います。あなたはデバッガを使いましたか?クラッシュはどのラインで起こりますか?さて、「temp」は初期化されていません(少なくともここではクラッシャーではありません)。 –