分段错误:链接列表上的冒泡排序

时间:2017-08-29 16:19:03

标签: c++ sorting pointers linked-list

我尝试在链表上进行冒泡排序并获得分段错误。我对链接列表排序是否正确?并且调试表明比较功能也有问题。

标记了我获得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 个答案:

答案 0 :(得分:2)

您正在取消引用可能未初始化的指针。

我想你应该改变条件(因为在前面你已经移动到下一个节点)

if(!ptr1)

或至少检查指针是否指向NULL。

if (pt1 && !ptr1->next)