无法理解为什么我不断收到此代码的段错误

标签 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,但我不断收到段错误。我的错误在哪里?这让我发疯。

最佳答案

由于 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

关于无法理解为什么我不断收到此代码的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55733060/

相关文章:

c - 解析代码并将其插入到C中的链接列表中

java - 如何从linkedList中递归删除一个项目?

c - 如何修复这些无效的参数类型(链接列表/结构)并确保它们不会再次发生?

c - 如何在 C 结构中使用二维数组?

c - 使用 scanf 输入进行切换

c - 如何在C中显示没有小数位的 float

c - c中的链表插入: inserting wrong values

java - Java 链表结构(泛型)

当 parent 过早杀死 child 时, child 会反转输出

c - 精度考虑在 C 中如何工作?