Не могу понять, почему я продолжаю получать ошибку сегментации для этого кода - PullRequest
0 голосов
/ 17 апреля 2019

Очень простой код:

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 голосов
/ 17 апреля 2019

Попробуйте объявить вашу структуру как

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

Затем используйте Node *node1 = malloc(sizeof (*node1));

0 голосов
/ 17 апреля 2019

Вы, вероятно, получаете ошибку сегмента из-за указателя 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;
    }
}

Iвнес это изменение и протестировал ваш код здесь: https://onlinegdb.com/B1endJr9E

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...