【发布时间】: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