2017-04-30 14 views
0

この問題の簡略化されたバージョンを検出できませんでした。listnodeループ、セグメント化エラー

私はおそらくちょうどそれらの試合simplea何かを理解していないので、私はlistnodesに新たなんです。私のforループを渡すまでは、すべて動作するようです。

while(temp2 != NULL){ 

    for(int i = temp2->data; i > 0; i--){ 
    ////////////// 
    temp1 = head; 
    temp3 = Product.head; 

     while(temp1 != NULL || temp3 != NULL){ 
      cout << "\ntemp1->data: " << temp1->data; 
      cout << "\ntemp3->data: " << temp3->data; 


      temp1 = temp1->next; 
      temp3 = temp3->next; 
     } 
    ///////////// 
    cout << "\n\ndecrement: " << i; 
    } 

temp2 = temp2->next;  
} 

コメントの間を除くすべてが実行されます。

私の考えは、私が戻って頭をポイントし、必要に応じて何度でも行き来終わりに到達したら、私は、その後、listnode(TEMP1)の最後までトラバースということでした。私はそこにセグメンテーションの欠陥を得ています。それはTEMP1を介して複数回通過することになると

私はTEMP2を通じてうまくトラバースカント、私はしかし間違って何をやっていますか?リストの先頭だけを参照することはできますか?

編集:私はちょうどで、条件を残したことを考え出した今、私にセグメンテーションフォールトを与えている。その私の第三のリスト。。それは1つのループで実行されますが、whileループからは1回だけ実行されます。

+4

||条件は&&にする必要があります。 –

答えて

0

このように考えてみましょう。 whileループの特定の反復では、temp1がアドレスを指しており、temp1->nextNULLを指しています。 temp3はアドレスを指し、temp3->nextもアドレスを指します。

temp1 == address 

temp1->next == NULL 

temp3 == address 

temp3->next == NULL 

あなたはtemp1temp3からのデータを印刷し、現在のアドレスを反復処理。次に、それらを次のポインタと同じに設定します。今すぐtemp1NULLを指し、temp3はアドレスを指しています。

whileループのあなたの状態は、ポインタのいずれかがNULLを指していないかどうかを確認します。 temp3NULLを指していないので、temp1temp3のデータを出力しようとします。しかし、これはNULLtemp1ポイントため、問題が発生します、あなたは、セグメンテーションフォールトが発生しますNULLポインタ、逆参照しようとしています。この問題を解決するために

temp1temp3NULLを指していないときにのみ印刷されるように、あなたはあなたのwhileループのためにAND(& &)条件を使用する必要があります。

関連する問題