无法理解为什么我的代码会不断出现细分错误

时间:2019-04-17 17:27:14

标签: c linked-list

一个非常简单的代码:

typedef struct node {
    int x;
    struct node* next;
} *Node;

void advance_node(Node ptr) {
    ptr = ptr->next;
    while (ptr) {
        printf("%d\n", ptr->x);
        ptr = ptr->next;
    }
}

int main() {
    Node node1 = malloc(sizeof (*node1));
    Node node2 = malloc(sizeof (*node2));
    Node node3 = malloc(sizeof (*node3));

    node1->x = 1;
    node1->next = node2;

    node2->x = 4;
    node2->next = node3;

    node3->x = 9;
    node3->next = NULL;

    advance_node(node1);
    return 0;
}

我希望看到4和9的输出,但是我仍然遇到分段错误。我的错误在哪里?这让我发疯。

2 个答案:

答案 0 :(得分:0)

您可能由于NULL指针而导致段错误。

您可以像这样在advance_node函数中轻松地防止这种情况的发生:

void advance_node(Node ptr) {
    if(!ptr) return; //protect against NULL pointer
    ptr = ptr->next;
    while (ptr) {
        printf("%d\n", ptr->x);
        ptr = ptr->next;
    }
}

我进行了更改,并在此处测试了您的代码:https://onlinegdb.com/B1endJr9E

答案 1 :(得分:0)

尝试将您的结构声明为

typedef struct node {
    int x;
    struct node* next;
} Node;

然后使用Node *node1 = malloc(sizeof (*node1));