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