2017-08-29 14 views
2

リンクリストにバブルソートを行い、セグメンテーションフォルトを取得しようとしています。私はリンクリストの並べ替えについてはすぐに行くのですか?デバッグは、比較関数にも何か問題があることを示しています。セグメンテーションフォールト

私がSEGFAULTになっている行がマークされています。

node { 
      string key; 
      node *next; 
}; 

void sorting(node &start){ 
    node *ptr,*ptr1,*pptr; 
    ptr=start.next; 
    while(ptr){ 

     bool flag = true; 
     ptr1=start.next; 
     pptr=ptr1; 
     while(ptr1){ 
      if(flag){   //for starting node 
        flag=false; 
       if(ptr1->key.compare(ptr1->next->key)>0){ 
        node *temp=ptr1->next; 

        start.next=temp; 
        ptr1->next=temp->next; 
        temp->next=ptr1; 
       } 
      }else{ 
       if(ptr1->key.compare(ptr1->next->key)>0){ 
        node *temp=ptr1->next; 
        pptr->next=temp; 
        ptr1->next=temp->next; 
        temp->next=ptr1; 
       } 
      } 
      pptr=ptr1; 
      ptr1=ptr1->next; 
      if(!ptr1->next) //getting segmentation fault at this line 
       break; 
     } 
     ptr=ptr->next; 
    } 
} 
+1

'場合(ptr1->次の!)' 'べきであるならば(PTR1!)'、すでに前方に1つの項目の横 'PTR1 = ptr1->と上記の1行を移動するので;'。 – mch

+0

'node next;はおそらく' node * text; 'であり、ポインタの型に注意してください。 –

答えて

1

初期化されていないポインタを参照しています。

私はあなたが

if(!ptr1) 

または少なくともNULLポインタdoesntのポイントかどうかを確認する(ステップで、以前のあなたはすでに次のノードに移動するため)に条件を変更する必要がありますね。

if (pt1 && !ptr1->next) 
関連する問題