代码之家  ›  专栏  ›  技术社区  ›  Egemen Yalın

C我可以使用刚刚释放的数据吗

  •  0
  • Egemen Yalın  · 技术社区  · 1 年前

    我有一个链表节点,我想编写一个释放节点的函数。 但为了做到这一点,我必须更新上一个节点的下一个变量。 我可以访问previous_node吗?>下一个(previous_node->next->!next)?

    struct node
    {
       struct node *next;
    }
    
    void free_node(struct node *previous_node)
    {
       free(previous_node->next);
    
       previous_node->next = previous_node->next->next; // can i do it or i have to store previous_node->next->next in a variable before freeing previous_node->next
    }
    

    我组装了它,看看是否会有任何差异,但我看到我的编译器优化了它,使其符合我的写作方式。

    1 回复  |  直到 1 年前
        1
  •  5
  •   Ted Lyngmo    1 年前

    我可以使用刚刚释放的数据吗

    不,这将表现出未定义的行为。

    或者我必须存储previous_node->下一个->在释放previous_node之前的变量中的next->下一个