提问者:小点点

向链表传递指针时分段错误


各位程序员好,下面的代码给出分段错误。 这段代码的目的是在链表的末尾插入一个元素。 我尝试使用print语句来调试它。 我认为错误在于将链表指针传递给insert()函数。 请告诉我怎样才能改正。 提前谢谢你。

下面是代码:

#include <iostream>
using namespace std;

class node {
public:
    int data;
    node *next;
    node(int data) {
        this->data = data;
        this->next = NULL;
    } 
};

class linked_list {
public: 
    node *head;
    linked_list() {
        this->head = NULL;
    }
};

void insert(node **head, int data);
void print(linked_list *L);

int main() {
    int N;
    linked_list *A = new linked_list();
    
    cout << "N: ";
    cin >> N;
    for(int i=0; i<=N-1; i++) {
        int t;
        cin >> t;
        insert(&(A->head), t);
    }
    print(A);
    return 0;
}

void insert(node **head, int data) {
    node *temp = new node(data);
    if(*head == NULL) {
        *head = temp;
        return;
    } else {
        node *t = *head;
        while(t->next != NULL) {
            t=t->next;
        }
        t->next = temp;
        return;
    }
}

void print(linked_list *L) {
    node * t = L->head;
    while(t!=NULL) {
        cout << t->data << " ";
        t = t->next;
    }
    return;
}

共1个答案

匿名用户

main.cpp:42:14: error: using the result of an assignment as a
      condition without parentheses [-Werror,-Wparentheses]
    if(*head = NULL) {
       ~~~~~~^~~~~~
main.cpp:42:14: note: place parentheses around the assignment to
      silence this warning
    if(*head = NULL) {
             ^
       (           )
main.cpp:42:14: note: use '==' to turn this assignment into an
      equality comparison
    if(*head = NULL) {
             ^
             ==
1 error generated.

你在你打算做比较的地方使用了赋值。