在对链表进行排序时获取信号sigsegv

时间:2018-10-10 05:21:57

标签: segmentation-fault singly-linked-list sigsegv

我正在尝试对链表进行排序,但是在排序时遇到了分段错误,尝试了debuggig,但是却找不到问题。

这是排序功能:

void Asort(struct lol **head_ref)
{
cout<<"Entered in asort function\n";
/// Sorting Asendingly
int temp1;  /// to store the temp value
struct lol* temp = *head_ref;
struct lol* next;
    while(temp!=NULL)
    {
        cout<<"Entered in while loop until null\n";
        next=temp->next;
        cout<<"log: " << next->element;


        if(temp->element > next->element && next!=NULL)
        {
                cout<<"Entered in If condition inside while loop\n";
                temp1=next->element;
                next->element=temp->element;
                temp->element=temp1;
        }
    temp=temp->next;
    }
    cout<<"Sorted Asending Successfully\n";
}

此处正在调用语句: Asort(* head)

1 个答案:

答案 0 :(得分:0)

  

if(temp->element > next->element && next!=NULL)

在取消引用之后,检查next是否为NULL 是没有意义的:如果它是NULL,则说明您已经死亡。

顺序很重要; next != NULL && temp->element > next->element会更好。

您在程序的其他位置也有类似的错误,例如

next=temp->next;
cout<<"log: " << next->element;  // will crash here if next==NULL