循環リスト内のノードを「クリア」するアルゴリズムに問題がありました。ほとんどの場合、プログラムはクラッシュしますが、クラッシュしないこともあります。アルゴリズムは大丈夫だと確信しており、解決策についての手がかりはありません... :-(
ここにいくつかのコードがあります:
clear()
関数 (注:mFreenode
循環リストの「頭と尾のない」ノードです) :
List* clear() {
if (mFreenode->getNext() != 0) {
Node<T>* current = mFreenode->getNext();
Node<T>* temp = 0;
while (current != mFreenode) {
temp = current->getNext();
delete current;
current = temp;
}
}
mFreenode->setNext(0);
mFreenode->setPrev(0);
mSize = 0;
return this;
}
そして、これはNode
デストラクタです:
~Node() {
delete &item;
}
なにか提案を?