更改指针方向时总线错误

时间:2018-04-15 00:33:35

标签: c++ pointers deque

我正在创建一个包含frontfrontSentinelrearrearSentinel的双端队列。 作为具有两个指针的节点类型*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;
}

很抱歉,如果我的英语不清楚。我希望,这足以解释我的问题。

我认为这是指针混乱,但不确定发生了什么。

0 个答案:

没有答案