链表泄漏
Linked list leaks?
我不太精通C++,但我的任务是设计和实现链表。这是我提交的:
template <typename T>
struct Node
{
Node() : next(nullptr) {}
Node(T const & val) : next(nullptr), value(val) {}
Node * next;
T value;
};
template <typename T>
class LinkedList
{
public:
LinkedList()
{
begin_ = new Node<T>;
current_ = begin_;
}
~LinkedList()
{
delete begin_;
}
void insert(T const & value)
{
Node<T> * node = new Node<T>(value);
node->next = current_->next;
current_->next = node;
current_ = current_->next;
}
void remove()
{
Node<T> * tmp = current_->next;
if(!end())
{
current_->next = current_->next->next;
}
delete tmp;
}
bool end() const
{
return current_->next == nullptr;
}
void reset()
{
current_ = begin_;
}
void advance()
{
if(!end())
{
current_ = current_->next;
}
}
T get() const
{
return current_->next->value;
}
private:
Node<T> * begin_;
Node<T> * current_;
};
我通过了作业,但我的老师在析构函数~LinkedList()
中划线delete begin_
,并在旁边写下"这泄漏!我一直在想delete begin_
怎么可能泄漏,但我仍然不明白。有人可以帮我吗?
您必须遍历列表中的每个节点并删除。 按住指向下一个的单独指针,删除当前指针,然后向前移动并继续删除,直到下一个指针为 null。
~LinkedList()
{
Node * current = begin_;
Node * aNext = begin_->next;
while (null != aNext){
delete(current);
current = aNext;
aNext = current->next;
}
}
像这样的东西。 不知道你从哪里得到begin_,但是......
在 Node 的析构函数中,它应该将 delete 命令发送到 next
,以便释放列表中的所有节点。
我想你会这样更好地理解它:
~LinkedList()
{
reset();
while(!end()) remove();
}
相关文章:
- 反向给定链表中的K节点
- 如果没有malloc,链表实现将失败
- 使用 valgrind 检查我的链表暗示中的内存泄漏,让我"肯定丢失:1 个块中有 40 个字节"
- 如何防止广义链表中的内存泄漏?
- 传递链表而不在C++内存泄漏的情况下
- 如何解决双链表中的这些内存泄漏?
- 链表类中的内存泄漏
- 自定义链表C++中的内存泄漏
- C++函数中的内存泄漏,Visual Studio 2012,链表
- 我的链表实现是否泄漏内存
- 试图理解我的链表程序中的内存泄漏
- C++内存从将数据插入链表中泄漏
- C++:链表析构函数内存泄漏
- C++帮助-从链表中泄漏数据和分段错误
- 链表泄漏
- 删除链表,内存泄漏C++
- 使用模板链表的C++堆栈-内存泄漏
- c++链表中的内存泄漏(Valgrind)
- 在C/ c++中,链表只有头指针分配在堆栈中,其他节点分配在堆中.这可能导致内存泄漏
- 清理双重链表(c++)中的内存泄漏