Ошибка сегментации в macOS, но не в Ubuntu - PullRequest
1 голос
/ 07 марта 2020

Я пытаюсь освободить связанный список в моем коде. Когда я пытаюсь освободить узел и напечатать этот адрес, это дает ошибку сегментации. Но если я попробую на Ubuntu, он будет работать правильно. Мой код выглядит так:

void Free(struct node* head) {
    while(head !=NULL){
        free(head);
        head=head->next;
   }
}

Моя структура:

struct node {
    int data;
    struct node* next;
};

Почему это не работает в MacOS?

1 Ответ

4 голосов
/ 07 марта 2020

Вы не можете разыменовать указатель после того, как освободили его. Вам нужно сохранить head->next, прежде чем освободить head.

void Free(struct node* head) {
    while(head !=NULL){
        node *next = head->next;
        free(head);
        head=next;
   }
}
...