我尝试在链表上进行冒泡排序并获得分段错误。我对链接列表排序是否正确?并且调试表明比较功能也有问题。
标记了我获得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;
}
}
答案 0 :(得分:2)
您正在取消引用可能未初始化的指针。
我想你应该改变条件(因为在前面你已经移动到下一个节点)
if(!ptr1)
或至少检查指针是否指向NULL。
if (pt1 && !ptr1->next)