-2
template <class T>
List<T>::~List()
{                
   ListItem<T> *temp,*temp1;
   temp=head;         
   while (temp->next!=NULL)         
   {
          temp1=temp;
          temp=temp->next;
          delete [] temp1;
   }        
}

/* This class just holds a single data item. */ 
template <class T>
struct ListItem
{
vector<string> words;
T value;
ListItem<T> *next;
ListItem<T> *prev;

ListItem(T theVal)
{
    this->value = theVal;
    this->next = NULL;
    this->prev = NULL;
}
};

template <class T>
void List<T>::insertAtHead(T item)
{
 ListItem<T> *node=new ListItem<T>(item);
 if (head==NULL)
 {
     head=node;
 }
 else
 {
     node->next=head;
     head->prev=node;
     head=node;
 }           
}
int main()
{
List<int> Mylist;
for (int i=20;i>0;--i)
{
    Mylist.insertSorted(i);
}
cout<<Mylist.getTail()->value<<endl;
system("PAUSE");
return 0;

}

クラスとテンプレートを使用してリンク リストを作成しています。このコードを実行すると正常に動作しますが、キーを押して終了すると、次のエラーが表示されます。「main.exe が動作を停止しました」というエラーが表示されます。デストラクタコードを追加しました。問題はありません。

4

1 に答える 1

1

new常にとdeleteとペアにする必要new[]がありdelete[]ますが、不一致があります

ListItem<T> *node=new ListItem<T>(item);
//                ^^^

delete [] temp1;
//^^^^^^^         
于 2013-02-18T11:54:15.973 に答える