C ++链接列表:内存泄漏问题

时间:2015-04-15 02:37:43

标签: c++ templates memory linked-list heap

我试图创建一个可以追加/删除/显示项目的链接列表。我得到了标题和测试完成,似乎有效。它成功附加,删除和显示结果。但是,在显示结果后,我立即得到一个运行时弹出窗口" Debug Assertion Failed!表达:_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)"

所以我做了一些调试,显然它是一个内存泄漏(或者至少我很确定它是)。我发誓我的析构函数写得正确。我的测试工作,链表工作(加上它的成员函数)有效,所以我做错了什么?

这是我的类声明,默认构造函数和析构函数

template <typename T>
class Node
{
public:
    T Value;
    Node<T> *next;
    Node(T nodeValue)
    {
        value = nodeValue;
        next = NULL;
    }
};

template <typename T>
class LinkedList
{
private:
    Node<T> *head;
public:
    LinkedList()
    { head = NULL; }

   ~LinkedList()
    {
        Node<T> *temp;
        Node<T> *nextNode;

        temp = head;

        while (temp != NULL)
        {
            nextNode = temp->next;
            delete temp;
            temp = nextNode;
        }
    }
}

此处是链接列表的其余部分(即使它有效,但万一你问)

void appendNode(T newValue)
{
    Node<T> *newNode;
    Node<T> *temp;

    newNode = new Node<T>(newValue);

    if (!head)
        head = newNode;
    else
    {
        temp = head;

        while (temp->next)
            temp = temp->next;

        temp->next = newNode;
    }
}

void deleteNode(T searchValue)
{
    Node<T> *temp;
    Node<T> *prev = NULL;

    if (!head)
        return;

    if (head->value == searchValue)
    {
        temp = head->next;
        delete head;
        head = temp;
    }
    else
    {
        temp = head;
        while (temp != NULL && temp->value != searchValue)
        {
            prev = temp;
            temp = temp->next;
        }
        if (temp)
        {
            prev->next = temp->next;
            delete temp;
        }
    }
}

void displayList() const
{
    Node<T> *temp;
    temp = head;
    while (temp)
    {
        cout << temp->value << " ";
        temp = temp->next;
    }
}

0 个答案:

没有答案