首页 > 解决方案 > SIGSEGV (Segmentation fault) c++ at function for pushBack() of list

问题描述

我在运行这段代码时遇到了段错误,但不明白为什么。如果首先我使用一次 push(&head,3); 那么segfault没有被捕获,但它对true不好

#include <iostream>
using namespace std;
struct Node
{
    int data;
    Node *next;
};

void push(Node **head,int data)
{
    Node *tmp = new Node;
    tmp->data = data;
    tmp->next = (*head);
    (*head) = tmp;
}
Node *getLast(Node *head)
{
    if(head == nullptr)
    {
        return nullptr;
    }
    while(head->next)
    {
        head=head->next;
    }
    return head;
}
void show(const Node *head)
{
    while(head!=nullptr)
    {
        cout << head->data << endl;
        head = head->next;
    }
}

void pushBack(Node *head,int data)
{
    Node *last = getLast(head);
    Node *tmp = new Node;
    tmp->data = data;
    tmp->next = nullptr;
    last->next = tmp;
}
int main() {
    Node *head=nullptr;
    **//push(&head,2);  /////if I use this then it works! but it not right.**
    pushBack(head,10);
    pushBack(head,2);
    pushBack(head,3);
    show(head);
    return 0;
}

我试图用谷歌搜索它,但它无能为力。如何解决这个问题呢?

标签: c++

解决方案


如果链表为空,则需要修改head,这需要传递head的引用。这应该有效:

void pushBack(Node **head,int data)
{
    Node *last = getLast(*head);
    Node *tmp = new Node;
    tmp->data = data;
    tmp->next = nullptr;
    if(last == nullptr)
    {
        *head = tmp;
    }
    else
    {
        last->next = tmp;       
    }
}
int main() {
    Node *head=nullptr;
    pushBack(&head,10);
    pushBack(&head,2);
    pushBack(&head,3);
    show(head);
    return 0;
}

推荐阅读