【问题标题】:Segmentation fault : Bubble sort on link list分段错误:链表上的冒泡排序
【发布时间】:2017-08-29 16:19:03
【问题描述】:

我正在尝试对链表进行冒泡排序并遇到分段错误。我对链接列表排序正确吗?调试显示比较功能也有问题。

我得到 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;
    }
}

【问题讨论】:

  • if(!ptr1->next) 应该是 if(!ptr1),因为您已经使用 ptr1=ptr1->next; 将 1 项向前移动了 1 行。
  • node next; 应该是node * text;,注意指针类型。

标签: c++ sorting pointers linked-list


【解决方案1】:

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

我想您应该将条件更改为(因为在前面的步骤中您已经移动到下一个节点)

if(!ptr1)

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

if (pt1 && !ptr1->next)

【讨论】:

    猜你喜欢
    • 2018-11-13
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    相关资源
    最近更新 更多