我试图创建一个可以追加/删除/显示项目的链接列表。我得到了标题和测试完成,似乎有效。它成功附加,删除和显示结果。但是,在显示结果后,我立即得到一个运行时弹出窗口" 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;
}
}