template <typename T>
class LinkedNode
{
public:
T data;
LinkedNode<T> *next;
LinkedNode<T> *prev;
LinkedNode<T>();
LinkedNode<T>(T);
};
// Default constructor
template <typename T>
LinkedNode<T>::LinkedNode()
{
next = NULL;
prev = NULL;
}
template <typename T>
class LinkedList
{
private:
LinkedNode<T> *head;
public:
LinkedList<T>();
~LinkedList<T>();
void addFront(T);
void addBack(T);
void addAt(T, int);
void removeFront();
void removeBack();
void removeAt(int);
void printList();
};
// Constructor
template <typename T>
LinkedList<T>::LinkedList()
{
head = NULL;
}
// Add new node to front
template <typename T>
void LinkedList<T>::addFront(T d)
{
LinkedNode<T> temp;
temp.data = d;
if (head == NULL)
{
head = &temp;
}
else
{
temp.next = head;
head->prev = &temp;
head = &temp;
}
}
// Add new node to back
template <typename T>
void LinkedList<T>::addBack(T d)
{
// Find the back of this list
LinkedNode<T> *ptr;
ptr = head;
while (ptr->next != NULL) // <------- DIES HERE, MEMORY ACCESS VIOLATION
{
ptr = ptr->next;
}
// Make a new node and join it to the back
LinkedNode<T> temp;
temp.data = d;
temp.prev = ptr;
ptr->next = &temp;
}
這是我的鏈接列表系統的一個片段。問題是它會在指定的行上引發錯誤。調試器說,「頭」指針指向LinkedNode的合法內存地址,沒有「next」或「prev」,但「ptr」指針指向地址0xcccccc,而不是頭的地址?我真的很困惑,我以爲我理解指針!C++鏈表幫助(指針)?
通常,0xcccccc是調試器告訴你指向的內存是未初始化的垃圾。如果調試器是正確的,由於ptr = head是正確的,錯誤在循環中。 ptr在ptr = ptr-> next後變成垃圾。所以不知怎的,連鎖店出現了一個錯誤。 – VoidStar