因此,我已经写过一个链表类,但现在我需要编写一个链表类模板。没有什么大不了的,但我在删除操作的时候遇到了问题。 我重复使用了尽可能多的代码,但我无法弄清楚为什么我的删除节点的函数在两个程序中的行为都不一样。在我的模板类实现中,当尝试使用delete释放内存时,会出现运行时错误。使用C++链接列表模板的内存管理类
下面是相关代码:
所有节点都在main.cpp中通过以下功能补充说:
template <class T>
void LinkedList<T>::insert(T data)
{
if(pHead == NULL)
{
pHead = new LinkedList<T>(data);
}
else
{
LinkedList<T> *ptr = pHead;
while(ptr->pNext != NULL)
{
ptr = ptr->pNext;
}
ptr->pNext = new LinkedList<T>(data);
}
}
所有节点都在main.cpp中通过以下功能删除:
template <class T>
void LinkedList<T>::removeFirst()
{
if(!pHead) return;
else
{
LinkedList<T> *next = pHead;
pHead = pHead->pNext;
if(next != NULL)
{
delete next;
}
}
}
这里是我的析构函数代码:
template <class T>
LinkedList<T>::~LinkedList()
{
clear();
}
template <class T>
void LinkedList<T>::clear()
{
LinkedList<T> *ptr = pHead;
while(ptr)
{
LinkedList<T> *pTemp = ptr->pNext;
delete ptr;
ptr = pTemp;
}
pHead = NULL;
}
我在removeFirst函数尝试调用delete时发生访问冲突。 我觉得问题很简单,但几乎完全相同的代码在我的非模板实现中起作用,所以我想在看到别人认为我的头靠在墙上太久之前,想看看其他人的想法。
谢谢。
“LinkedList”的声明在哪里? –
不是这个问题,但是我发现在'reomveFirst'函数中'if(next!= NULL)'没有任何理由,因为您已经检查过'pHead'并将它分配给'next'。 –
通过逐步调试调试器中的代码可以解决问题(或者至少是孤立的)。 –