2017-02-26 10 views
1

テスタープログラムを渡そうとしていますが、私の消去機能を除いてすべてのテストに合格します。プログラムがクラッシュします。リンクリストのErase()関数のバグ

おそらく、正面または背面のセンチネルノードが消去されている可能性があります。またはメモリリーク。

+0

あなたは、これはあまりにも多くのコードで、問題の最小限の再現を提供する必要があります。 – Kelm

+0

2 param erase機能に問題があり、 – bb13

+0

が "line 7 test"を印刷してプログラムがクラッシュし、メインの一番下の "line 8 test"に決して到達しないことがわかりません – bb13

答えて

1

誰もがこのコードをすべて読んで、特にMCVEが存在しない場合に、このコードを読んであなたのバグを見つけようとします。一見すると、右または左のどちらかがnullの場合は、あなたが最初に削除した場合に発生する、チェックしていなかった機能で、明らかに間違って何かvoid erase(iterator it)

left->next_ = right;

right->prev_ = left;

がありますまたはあなたのリストの終わりに。またリストのfront_back_を適宜変更する必要があります。

あなたはそれらの割り当ての前にチェックを追加することができます。

if(left) 
    left->next_ = right; 
else 
    front_ = right; 

if(right) 
    right->prev_ = left; 
else 
    back_ = left; 
+0

コメントは議論の延長ではありません。この会話は[チャットに移動]されています(http://chat.stackoverflow.com/rooms/136673/discussion-on-answer-by-ash-bug-in-my-erase-function-for-linked-list) 。 –