2013-02-18 73 views
-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; 

}链表(在头插入)

我使用类做一个链表和template.When我运行此代码,它运行良好,但是当我按下一个键退出,下面的错误出现:“main.exe已停止工作” 我正在使用Dev C++。我添加了析构函数code.I没有看到任何问题。

+1

超过此无关,与你的链表,以及一切与'系统(“暂停”) ;' – StoryTeller 2013-02-18 11:12:03

+0

我删除了系统(“暂停”),但仍然出现同样的错误 – User14229754 2013-02-18 11:20:24

+0

在销毁MyList时可能有问题。在调试器中运行以查看它崩溃的位置。 (顺便说一句:你为​​什么包括'insertAtHead',你不使用它的代码?) – molbdnilo 2013-02-18 11:29:32

回答

1

您必须始终配对newdeletenew[]delete[],但你有一个不匹配

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

delete [] temp1; 
//^^^^^^^   
+0

非常感谢!我不知道。 – User14229754 2013-02-18 11:58:59