为什么我的while循环会出现分段错误?

时间:2017-02-07 19:32:19

标签: c++ while-loop segmentation-fault

我正在使用链接列表在c ++中编写ADT,并且我在我的一个函数中看起来像是一个while循环而一直遇到分段错误。我自己试着调试它,但找不到故障的来源。

以下是函数中的代码:

   void remove(int a){
        cout << "remove" << endl;
        node * temp;
        cout << "remove 2" <<endl;
        while(head->number != a){
            cout << "remove 3" << endl;
            head = head->next;
        }
        cout << "remove 4" << endl;
        temp = head;
        head = head->next;
        delete temp;
    }

Head是一个普通节点,其中head中的变量数是一个整数。头本身是一个节点指针。

谢谢!

2 个答案:

答案 0 :(得分:-1)

正如大家在评论中指出的那样,你需要通过检查head的值来检查你是否已经到达列表的末尾。

void remove(int a){
    node * temp;
    node *ptr = head;
    /* Keep iterating list if {Conditional 1 - Head is not NULL && Conditional 2 - number not equal to a} */
    while(ptr && ptr->number != a){
        ptr = ptr->next; //Walk the linked list
    }
    /* Do this only if head is not NULL!! */
    if(ptr != NULL) { 
        /* Save head pointer in temp */
        temp = ptr;
        /* Increment head to point to next node in list */ 
        ptr = ptr->next;
        /* Delete original item pointed to by temp */
        delete temp;
    }
}

理想情况下,'head'始终指向列表的开头(因此名称为head)。我们通常在迭代列表之前声明一个指向head的临时指针。

答案 1 :(得分:-3)

在使用数字

之前,您必须检查头部是否指向null