繁体   English   中英

删除链表中的节点时未定义的行为

[英]Undefined behaviour on deleting a node in linked list

所以我试图删除双向链表中的一个节点,只给出一个指向该节点的指针。 这是我的代码:

void deleteNode(Node* node) {
    if(node == NULL) {
        return;
    }
    
    if(node->next != NULL) {
         node->next->prev = node->prev;
    }
    if(node->prev != NULL) {
         node->prev->next = node->next;
    }

    node->next = NULL; node->prev = NULL;
    free(node);
    node = NULL;
}

当我尝试删除单个节点时,头指针仍然不是 NULL。 相反,如果我尝试打印密钥,它会给出一些随机值。 什么可能导致这种行为? 有什么解决办法吗?

node = NULL;

什么也没做。 node是一个局部变量,当 function 返回时它不再存在。

void deleteNode(Node **node) 
{
    if(node && *node) 
    {
        if((*node)->next) (*node)->next->prev = (*node)->prev;
        if((*node)->prev) (*node)->prev->next = (*node)->next;

        free(*node);
        *node = NULL;
    }    
}

如您所见,代码可以减少到几行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM