删除链接列表是否安全

Am I safely deleting a linked list?

本文关键字:安全 是否 列表 链接 删除      更新时间:2023-10-16

只想知道在这个删除链表的实现中是否有任何缺陷/不一致/内存泄漏:

// Function to delete the entire linked list
void deleteList(Node** head) {
    Node* current = *head;
    Node* next;
    while (current != 0) {
        next = current->next;
        delete current;
        current = next;
    }
    *head = 0;
}

编辑:

struct Node {
    int data;
    Node* next;
    Node(int data) : data(data){}
};

如果通过引用而不是通过指针传递头指针,那就更像C++了:

void deleteList(Node * & head)
{
    // (...)
    head = nullptr; // NULL in C++ pre-11
}

此外,为了使代码更加整洁,您可以在循环中移动next的声明:

while (current != 0) 
{
    Node * next = current->next;
    delete current;
    current = next;
}

我对内存泄漏的唯一担忧是正确释放节点的内容,但由于您存储了一个简单的int,所以应该不会有任何问题。

假设您的列表有指向节点的有效指针,并且头指针也是有效的,那么其他一切似乎都很好。