删除链接列表是否安全
Am I safely deleting a linked list?
只想知道在这个删除链表的实现中是否有任何缺陷/不一致/内存泄漏:
// 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,所以应该不会有任何问题。
假设您的列表有指向节点的有效指针,并且头指针也是有效的,那么其他一切似乎都很好。
相关文章:
- 通过网络、跨平台传递std::变体是否安全
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- 跨 DLL 边界访问虚拟方法是否安全/可能?
- 静态 constexpr 类成员变量对多线程读取是否安全?
- 在函数结束后使用指向变量的指针是否安全?
- 逐字节删除 void* 是否安全?
- 在 RAII 构造中修改 RVO 值是否安全?
- 线程调用的函数对对象删除是否安全?
- 将对象的字节复制到数组并再次复制回来是否安全
- std::memmove在同一对象之间是否始终安全
- 使用枚举为数组编制索引是否安全?
- 返回从字符串文本创建的静态string_view是否安全?
- 在cstlib中将#include_next替换为#include是否安全
- 由并发无序映射查找线程调用的函数是否安全?
- 使用 c++ 原子时编写"y=++x"是否安全?
- 从另一个线程发出信号是否安全?
- 从其存储的回调中删除 std::函数是否安全
- 使用 std::vector::swap 方法在C++中交换两个不同的向量是否安全?
- 当我在C++中调用 struce 的只读静态成员时,线程是否安全
- 同时调用 ASIO 对象的 API 是否安全?