【问题标题】:Segmentation fault on macOS but not on UbuntumacOS 上的分段错误,但 Ubuntu 上没有
【发布时间】:2020-06-20 03:06:48
【问题描述】:

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

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

我的结构是:

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

为什么不能在 macOS 上运行?

【问题讨论】:

    标签: c macos ubuntu segmentation-fault


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答。我试过了,但它也不起作用。另外我想知道它如何在ubuntu中工作?有什么区别?
    • 如果您仍然遇到问题,那是因为您的代码中存在其他错误。你确定最后一个节点有next == NULL吗?
    • 是的。我应该写 next->next=NULL 吗?
    • 不,你不需要它,因为你正在释放它们。
    • 我认为我在打印时遇到了问题。删除操作后,如果我不再写列表,它可以工作。但是当我尝试编写它时,我遇到了分段错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 2011-07-20
    • 2012-06-25
    • 1970-01-01
    相关资源
    最近更新 更多