我正在创建一个包含front
,frontSentinel
,rear
和rearSentinel
的双端队列。
作为具有两个指针的节点类型*next
和*prev
。此外,它们还有模板类型元素。
当我尝试插入第一个节点时,我的编译器正在提供总线错误。
我的LinkedDeque
类的构造函数如下:
template <class Element>
LinkedDeque<Element>::LinkedDeque()
{
Node<int>*_front = new Node<int>(0);
Node<int>*_rear = new Node<int>(0);
Node<int>*rearSentinel = new Node<int>(0);
Node<int>*frontSentinel = new Node<int>(0);
_front -> setNext(frontSentinel);
frontSentinel -> setPrevious(_front);
_rear -> setPrevious(rearSentinel);
rearSentinel -> setNext(_rear);
frontSentinel -> setNext(rearSentinel);
rearSentinel -> setPrevious(frontSentinel);
num_elements = 0;
}
我没有问题。他们都将开始*next
和*prev
更改为nullptr
,这是我想要的。但是当我尝试插入第一个节点时,会出现总线错误。以下是insertFront()
的实现:
template <class Element>
void LinkedDeque<Element>::insertFront(const Element & element)
{
// create new node with *next and *prev at nullptr
// and element passed by reference
Node<Element> new_node = Node<Element>(element);
if(isEmpty())
{
//check if empty
new_node.setNext(rearSentinel); // I change *next to point the rear
new_node.setPrevious(frontSentinel); // Change *prev to point front
// Good, it sets *prev addres to new_node addres
rearSentinel -> setPrevious(&new_node);
frontSentinel -> setNext(&new_node); // There crash, bus error.
}
}
我的Node
课程如下:
template <class Element>
class Node
{
public:
Node(const Node& orig);
Node(Element e);
const Element& getElement();
Node<Element>* getNext() const;
void setNext(Node<Element> *_next);
Node<Element>* getPrevious() const;
void setPrevious(Node<Element> *_prev);
~Node();
private:
Node <Element> *next;
Node <Element> *prev;
Element element;
};
template <class Element>
Node<Element>::Node(Element e)
{
this->next = nullptr;
this->prev= nullptr;
this->element = e;
}
template <class Element>
Node<Element>::~Node()
{}
template <class Element>
const Element& Node<Element>::getElement()
{
return element;
}
template <class Element>
Node<Element>* Node<Element>::getNext() const
{
return this->next;
}
template <class Element>
Node<Element>* Node<Element>::getPrevious() const
{
return this->prev;
}
template <class Element>
void Node<Element>::setNext(Node<Element> *_next)
{
this->next = _next;
}
template <class Element>
void Node<Element>::setPrevious(Node<Element> *_prev)
{
this->prev = _prev;
}
很抱歉,如果我的英语不清楚。我希望,这足以解释我的问题。
我认为这是指针混乱,但不确定发生了什么。