-2

循環リスト内のノードを「クリア」するアルゴリズムに問題がありました。ほとんどの場合、プログラムはクラッシュしますが、クラッシュしないこともあります。アルゴリズムは大丈夫だと確信しており、解決策についての手がかりはありません... :-(

ここにいくつかのコードがあります:

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;
}

なにか提案を?

4

3 に答える 3

0

あなたのデストラクタは非常に疑わしいようです - 私はそれitemがのメンバー変数であると仮定していますNode. itemが値の型 (intまたは など) の場合は、std::stringまったく削除しないでください。それがポインターの場合、おそらく実行する必要がありますがdelete item;、ノードがポインターを持つアイテムの所有権を持っている場合のみです。

于 2013-05-10T17:36:16.710 に答える