2016-08-16 8 views
-2

リンクされたリストでノードを削除しようとしていますが、削除コマンドの後にノード内にデータを表示しようとしましたが、削除されたと思われるデータを表示できます。検索はdelete Dポインタを介してデータを読み込みノードを削除しないでください

int position=0; 
    while(admintemp !=NULL) 
    { 
     position=position+1; 
     if(admintemp==search) 
     { 
      cout<<"found"<<position; 
      getch(); 
      break; 

     } 
     admintemp = admintemp->next;  
    } 


    node *body = new node; 
    node *admintemp = new node; 
    if(position>0) 
    { 
     admintemp = adminhead; 

     for (int i= 1;i<position;i++) 
     { 
      body = admintemp; 
      admintemp = admintemp->next; 
     } 
     body->next=admintemp->next; 
     cout<<"deleting"; 
     getch(); 
     delete admintemp; 
    }  
+2

このような問題を解決する適切なツールは、デバッガを使用することですが、そうする前にスタックオーバーフローを尋ねることはありません。 1つ目の行でコードを検査するときに行ったすべての観察を教えてください。また、[**小さなプログラムをデバッグする方法(Eric Lippertによる)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)**]を読んでみてください。あなたの問題を再現する** [MCVE] **を私たちに任せてください。 (これはπάνταῥεῖ™が提供する個人的なコメントです) –

+0

@πάνταῥεprogramプログラムは実際に実行されました。デバッガとコンパイラはエラーを検出できませんでした。ノードを削除した後、私はリストを走査しようとし、プログラムがクラッシュしました。 –

+1

実際にデバッガを使用する方法を学ぶ! –

答えて

2

を削除しようとしているノードのイムは、「未定義の動作」です - コンパイラはそれは喜ばとあなたのプログラムが意味を持たない何ができることを意味しています。

あなたあなたが期待する結果を得ることができ、あなたがクラッシュを得ることができ、あなた悪魔があなたの鼻を飛び出すことがあります。伝える方法はありません。プログラムは無効です。の動作はOKです。 C++標準の規則に従って、にはが定義されていない振る舞いを呼び出すことはありません - それはです。コンパイルして実行しますが、コンパイラは規則を壊してしまったので、まったく)。

+0

削除後にリストをトラバースしようとします。ノード上のデータを表示してクラッシュします。これは "未定義の振る舞い"のためですか? –

+0

これは許可されています。何もしていないので。あなたのPCを再起動しています。 "Undefined Behavior"とは、 "あなたがやったことをやることによってルールを破って、コンパイラは今何をしたいかを決めることができます*"という意味です - 文字通り*義務はありません*。それを修正する方法は、 "*それをやめること"です。 –

+0

トライアル中にヘッドノードを削除していたために問題が発生しました。これまでプログラムがそうなっていたなら、ヘッドノードを削除するためにいくつかの行を追加しました。うまく動作すると思います。ありがとうございます –

関連する問題