[尝试附加到链表时出现分段错误,c ++

问题描述 投票:0回答:1

我有这样定义的结构:

struct Node { 
    int day = 0; 
    int number = 0;
    Node* next = nullptr; 
};

并编写了一个create函数

Node* ll_create(int day, int number){
    Node* p = new Node;
    p->day = day;
    p->number = number;
    p->next = nullptr; 
    return p;
}

但是我的append函数总是以分段错误结尾

void ll_append(Node* head, int day, int num, int len){
    Node* new_cnode = ll_create(day,num);

    Node* last = head;
    while (last->next != nullptr)
        last = last->next;

    last->next = new_cnode;

}

有人可以告诉我如何解决此问题吗?

c++ linked-list
1个回答
0
投票

最可能是问题的根本原因是missing error handling。即可以遵循的基本规则是:在取消引用任何指针之前,应先对其进行验证。

void ll_append(Node* head, int day, int num, int len){
    Node* new_cnode = ll_create(day,num);

    Node* last = head;
    while (last->next != nullptr) //Here, last (i.e. head) can be nullptr.
        last = last->next;

    last->next = new_cnode;

}

可以在调用方ll_append做出决定,以确保headll_append本身可以验证。

第一个解决方案可能如下所示:

void ll_append(Node*& head, int day, int num, int len){
    Node* new_cnode = ll_create(day,num);
    //Case 1 : When head is pointing to empty list, you can create the first node.
    if(not head)
    {
       head = new_node;
       return;
    }
    //Case 2 : When head is pointing to a valid list (i.e. at least one node is present)
    Node* last = head;
    while (last->next != nullptr)
        last = last->next;

    last->next = new_cnode;

}
© www.soinside.com 2019 - 2024. All rights reserved.