これまでリンクリストクラスを作成しましたが、リンクリストテンプレートクラスを作成する必要があります。大したことではありませんが、私はdelete演算子の大きな問題で問題を抱えてきました。 できるだけ多くのコードを再利用しましたが、ノードを削除する関数が両方のプログラムで同じように動作しない理由を理解できません。テンプレートクラスの実装では、削除でメモリを解放しようとしたときに実行時エラーが発生します。C++リンクリストテンプレートクラスを使用したメモリ管理
はここに関連するコードです:
すべてのノードは、次の関数を経由してmain.cppにに追加された:
すべてのノードは、次の関数を経由して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);
}
}
:
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」の宣言はどこですか? –
問題はありませんが、すでに 'pHead'をチェックして' next'に割り当てているので、 'reomveFirst'関数で' if(next!= NULL) 'の理由が見つかりません。 –
問題は、デバッガでコードをステップ実行することで解決できます(または少なくとも分離されている)。 –