2016-04-13 8 views
0

毎回、このプログラムを実行しようとすると、リンクリスト内のすべての数値をソートしようとするとセグメンテーションフォールトが発生し続けるのですが、whileループのどこかにあることがわかりますリンクリストをソートしてもセグメンテーションフォールトが発生する

while(marker_ptr->link()->link()!= NULL) 
{ 
    minum = prev->link(); 
    temp=minum->link(); 
    prev->set_link(temp); 
    minum->set_link(head_ptr); 
    head_ptr=minum; 
    marker_ptr=minum->link(); 
previouse_minimum(head_ptr); 
    } 

あなたは私はそれ

node(
    const value_type& init_data = value_type(), 
    node* init_link = NULL 
) 
{ data_field = init_data; link_field = init_link; } 

// Member functions to set the data and link fields: 
    void set_data(const value_type& new_data) { data_field = new_data; } 
    void set_link(node* new_link)    { link_field = new_link; } 

// Constant member function to retrieve the data: 
value_type data() const { return data_field; } 

// Constant member functions to retreive the link: 
    node* link() const   { return link_field; } 

private: 
value_type data_field; 
node* link_field; 
}; 

node* previouse_minimum(node*& head_ptr){ 
    node* cursor; 
    node* minimum; 
    node* prev; 
    minimum=head_ptr; 

    for(cursor=head_ptr; cursor != NULL; cursor=cursor->link()) 
     if(cursor->data() < minimum->data()) 
     minimum=cursor; 

    cursor = head_ptr; 
    prev = cursor; 
    while(cursor->link() != minimum) 
    { 
     cursor = cursor->link(); 
     prev = cursor; 

    } 
    cout << prev->link()->data() << endl; 
    return prev; 

} 

void sort(node*& head_ptr, node*& marker_ptr) 
{ 
    node* print_ptr; 
    node* prev = previouse_minimum(head_ptr); 
    node* temp=NULL; 
    node* minum; 
    marker_ptr = head_ptr; 

    while(marker_ptr->link()->link()!= NULL) 
    { 
     minum = prev->link(); 
     temp=minum->link(); 
     prev->set_link(temp); 
     minum->set_link(head_ptr); 
     head_ptr=minum; 
     marker_ptr=minum->link(); 
     previouse_minimum(head_ptr); 
    } 
    for(print_ptr = head_ptr; print_ptr !=NULL; print_ptr = print_ptr->link()) 
    cout << print_ptr->data() << " "; 

    cout << endl; 

    } 

答えて

0

を使用していますいくつかのコンテキストを取得することができますので、これをdに見える私は、これはコードのほとんどであること

と間違っている何見当がつかない怒りのように:

while(marker_ptr->link()->link()!= NULL) 

リストの最後のノードにはリンクがないため、null-> link()を試しています。

while(marker_ptr->link() != NULL && marker_ptr->link()->link() != NULL) 

でそれを変更し、ワンセグ障害がまだoccuresかどうかを確認してください。 これはアルゴリズムを壊すかもしれませんが、そこからさらに作業することができます。

Btw;私はあなたのコードのフォーマットが悪いので頭痛があります:(

関連する問題