我正在尝试使用链表方法构建我自己的一个std容器版本。每次我获得新数据时,我都会创建一个新节点并将其放在容器中。当它破坏的容器时,D'tor将摧毁所有节点。
奇怪的是,在进行泄漏检查(使用valgrind)后,它说我每次都有泄漏我插入第一个数据。这是插入代码:
template<typename A, typename T>
typename container<A, T>::Iterator Queue<A, T>::insert(
const A& priority, const T& object) {
Iterator head = this->begin();
Iterator tail = this->begin();
this->findElementPlace(priority, head, tail);
Node<A, T> *newNode = new Node<A, T>(priority, object);
head.node->next = newNode;
newNode->next = (tail.node);
++head;
(this->Psize)++;
return head;
}
它一直在指我这一行:
Node<A, T> *newNode = new Node<A, T>(priority, object);
Node类非常基础:
template<typename A, typename T>
class Node {
public:
Element<A, T> element;
Node* next;
Node() :
element(), next(NULL) {
}
Node(const A priority, const T data) :
element(priority, data), next(NULL) {
}
~Node() {
}
};
存储第一个数据的位置并不重要,它始终表示虽然D'tor会处理它,但不会删除特定数据。它使用擦除功能擦除从第一个到最后一个的所有元素。这是主循环:
while ((from < to) && (from < this->end())) {
it.node->next = from.node->next;
Iterator temp = from;
++from;
delete temp.node;
(this->Psize)--;
}
它删除Iterator“from”到Iterator“to”之间的所有节点,包括“from”,不包括“to”
有谁知道如何解决这个问题?
答案 0 :(得分:0)
我发现了问题。 迭代器包含一个索引参数和运算符&lt;比较索引。 问题是每个循环“this-&gt; end()”被重新计算,但迭代器“from”和“to”不再相关,因为它们的索引不再相关了。 我添加了对其索引的更新,以便这次释放容器中的所有元素。 新的擦除循环是:
while ((from < to) && (from < this->end())) {
it.node->next = from.node->next;
Iterator temp = from;
from.index--;
++from;
delete temp.node;
(this->Psize)--;
to.index--;
}