因此,我已經寫過一個鏈表類,但現在我需要編寫一個鏈表類模板。沒有什麼大不了的,但我在刪除操作的時候遇到了問題。 我重複使用了儘可能多的代碼,但我無法弄清楚爲什麼我的刪除節點的函數在兩個程序中的行爲都不一樣。在我的模板類實現中,當嘗試使用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'。 –
通過逐步調試調試器中的代碼可以解決問題(或者至少是孤立的)。 –