2016-04-13 31 views
0

Bu program çalıştırmayı denediğimde, parça listesindeki tüm sayıları en küçükten en küçüğe doğru sıralamaya çalıştığımda segmentasyon hatası almaya devam ediyorum while döngüsünde bir yerde olduğunu buldumayrılmış liste sıralama ama segmentasyon hatası alma

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); 
    } 

sen bunu

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; 

    } 

cevap

0

kullanıyorum bazı bağlamda alabilirsiniz Bu d görünüyor ben bu kodun en çok buna

yanlış nedir hiçbir fikrim yok angerous yapmak:

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

listenin sonuna üzerine düğüm bir bağlantı olmaz, sen null- çalışıyoruz böylece> bağlantısını().

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

bunu değiştirip seg arıza hala occures olmadığını görmek için deneyin. Belki bu algoritmayı kıracaktır, ancak o zaman buradan daha fazla çalışabilirsiniz ..

Btw; Şu anda kodunuzun hatalı biçimlendirilmesinden başım ağrıyor :(