奇怪的容器内存泄漏

时间:2014-06-24 13:27:50

标签: c++ memory-leaks new-operator

我正在尝试使用链表方法构建我自己的一个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”

有谁知道如何解决这个问题?

1 个答案:

答案 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--;
}