macOS上的分段错误,但Ubuntu上没有

macOS上的分段错误,但Ubuntu上没有,c,macos,ubuntu,segmentation-fault,C,Macos,Ubuntu,Segmentation Fault,我试图在我的代码中释放一个链接列表。当我尝试释放节点并打印该地址时,会出现分段错误。但如果我在Ubuntu上试用,它会正常工作。我的代码是这样的: void Free(struct node* head) { while(head !=NULL){ free(head); head=head->next; } } 我的结构是: struct node { int data; struct node* next; }; 为什么

我试图在我的代码中释放一个链接列表。当我尝试释放节点并打印该地址时,会出现分段错误。但如果我在Ubuntu上试用,它会正常工作。我的代码是这样的:

void Free(struct node* head) {
    while(head !=NULL){
        free(head);
        head=head->next;
   }
}
我的结构是:

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

为什么它不能在macOS上工作?

释放指针后,无法解除对它的引用。您需要先保存
head->next
,然后才能释放
head

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

释放指针后,不能解除对它的引用。您需要先保存
head->next
,然后才能释放
head

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

谢谢你的回答。我试过了,但它不起作用。我还想知道它在ubuntu中是如何工作的?有什么区别?如果你仍然有问题,那是因为你的代码中有其他的错误。您确定最后一个节点具有
next==NULL
?是的。我应该写下一个->下一个=NULL吗?不,你不需要,因为你正在释放它们。我想我在打印它时有问题。删除操作完成后,如果我不再次写入列表,它就会工作。但是当我试着写它的时候,我犯了一个错误。谢谢你的回答。我试过了,但是它不起作用。我还想知道它在ubuntu中是如何工作的?有什么区别?如果你仍然有问题,那是因为你的代码中有其他的错误。您确定最后一个节点具有
next==NULL
?是的。我应该写下一个->下一个=NULL吗?不,你不需要,因为你正在释放它们。我想我在打印它时有问题。删除操作完成后,如果我不再次写入列表,它就会工作。但是当我试着写的时候,我犯了一个错误。