我在C++中創建了這個鏈表列類,它運行良好,除非我運行它之後程序無響應。我找到了導致問題的線路,但我不知道爲什麼。即使我輸入的方式不同,它仍然會執行相同的操作。代碼行正在查殺我的程序
這是我的列表類:
#include <string>
template<class T>
class List : public Object{
private:
Node<T>* first;
Node<T>* last;
int length;
public:
List() : Object(new std::string("List")) {
first = NULL;
last = NULL;
length = 0;
}
~List() {
delete first;
delete last;
}
void Add(T value) {
if(first==NULL)
first = new Node<T>(NULL, value);
else if(last==NULL)
---->last = new Node<T>(first, value);<-----
else
last = new Node<T>(last, value);
length++;
}
T Remove(T value) {
Node<T>* temp = first;
while(temp!=NULL) {
if(temp->GetValue()==value) {
temp->GetPrev()->SetNext(temp->GetNext());
temp->GetNext()->SetPrev(temp->GetPrev());
delete temp;
length--;
return value;
}
temp = temp->GetNext();
}
return 0;
}
T Get(int index) {
Node<T>* temp = first;
int i = 0;
while(temp!=NULL) {
if(i==index)
return temp->GetValue();
i++;
temp = temp->GetNext();
}
return 0;
}
};
當我刪除的程序上面標線去響應。這是我的節點構造:
#include <string>
template<class T>
class Node : public Object{
private:
Node* next;
Node* prev;
T value;
public:
Node(Node* prev, T value) : Object(new std::string("Node")){
if(prev!=NULL) {
prev->next = this;
this->prev = next;
}
next = NULL;
this->value = value;
}
~Node() {
delete next;
}
T GetValue() {
return value;
}
Node* GetNext() {
return next;
}
Node* GetPrev() {
return next;
}
};
我的對象類:
#include <string>
class Object {
private:
std::string* type;
public:
Object() {
type = new std::string("Object");
}
Object(std::string* type) {
this->type = type;
}
~Object() {
delete type;
}
std::string* GetType() {
return type;
}
};
我Test.cpp的
#include <iostream>
#include <string>
#include "Object.h"
#include "Node.h"
#include "List.h"
using namespace std;
int main() {
List<int> l;
l.Add(5);
l.Add(93);
l.Add(17);
l.Add(7789);
l.Add(60);
cout << "node 4 is:" << l.Get(3) << endl;
return 0;
}
錯誤圖像http://i50.tinypic.com/2mw5phi.png 感謝您的閱讀,並請只要你能幫忙,如果您需要我提供更多信息,請發表評論。
您是否收到任何錯誤? – 0x499602D2
沒有輸出是好的。該列表的作品,它只是讓我的程序不響應和Windows給出了沒有響應的錯誤 – user1494136
您的構造函數引用'prev'。但是'prev'沒有顯示在你發佈的代碼的範圍內。請發佈*足夠的*代碼以顯示所有相關的變量和操作。 – abelenky