-1
void deleteElement(LinkedListElement<char> *&pending)
{
    if (pending->Next) {
        char value = pending->Next->Data;
        pending->Data = value;
        LinkedListElement<char> *temp = pending->Next;
        pending->Next = pending->Next->Next;
        delete temp;
    }else{
        pending = NULL;
        //pending =nullptr;
        delete pending;
    }
}

C++ の単純な削除ノードで質問したいのは、リンクされたリストが end の場合は else ステートメントにあるため、自分自身を削除するだけで、値を参照 (&) で渡すことができますが、機能しません。

void deleteElement(LinkedListElement<char> *&pending)
{
    if (pending->Next) {
        char value = pending->Next->Data;
        pending->Data = value;
        LinkedListElement<char> *temp = pending->Next;
        pending->Next = pending->Next->Next;
        delete temp;
    }else{
        delete pending;
        //pending = NULL;
    }
}

私はこの方法を試してみましたが、常にエラーが発生しました: malloc: * オブジェクト 0x100103b40 のエラー: 解放されているポインターが割り当てられていませんでした *デバッグするために malloc_error_break にブレークポイントを設定します

4

1 に答える 1

1

そのはず

 delete pending;
 pending = NULL;

あなたのバージョンは逆です)。最初にポインターを に設定し、その後それを削除していることに注意してください。つまり、効果的に null ポインターNULLを呼び出していることになります。deleteこれはノーオペレーションです - メモリは解放されません。

于 2012-12-06T19:14:59.370 に答える