创建动态循环队列,元素输出正常,但程序崩溃

Making dynamic circular queue, elements output fine but program crashes?

本文关键字:程序 崩溃 元素 动态 循环 队列 创建 输出      更新时间:2023-10-16

程序编译得很好,但是当输出窗口出现时,它显示了我输出的元素,然后我听到窗口的声音,然后它就停止了

我正在尝试将元素排队到循环队列中,并且似乎它们正在输入,因为显示函数将它们打印出来。一切似乎都说得通,但程序就是崩溃了,有人能详细说明为什么它会这样做吗?我的代码如下:

#include <iostream>
#include <algorithm>

using namespace std; 
template<class QueueElement>
class dynamic_queue
{
  public:
  dynamic_queue(int = 10);
  dynamic_queue(const dynamic_queue &);
  ~dynamic_queue();
  QueueElement *getHead();
  int getSize() const; 
  bool isEmpty()const; 
  int getCapacity();
  void display(ostream &out) const; 
  void enqueue(const QueueElement &value);
  void dequeue();
  bool swap(dynamic_queue &, dynamic_queue &);
  void clear();
  const dynamic_queue & operator=(const dynamic_queue &);
  friend ostream & operator<< <> (ostream &, const   
   dynamic_queue<dynamic_queue> &);
private:
  int ihead; 
  int itail; 
  int initial_capacity;
  int array_capacity;
  int array_size;
  QueueElement *myarray; 
};

template<class QueueElement>
dynamic_queue<QueueElement>::dynamic_queue(int n)
:ihead(0),itail(0)
{
  if (n <= 0)
  {
    initial_capacity = 1; 
  }
  else
  {
    initial_capacity = max(n, 1);       
  }
array_capacity = initial_capacity; 
myarray = new QueueElement(initial_capacity); 
array_size = initial_capacity;

}
template<class QueueElement>
dynamic_queue<QueueElement>::~dynamic_queue()
{
  delete[]myarray;
}
template<class QueueElement>
void dynamic_queue<QueueElement>::enqueue(const QueueElement &inserted_value 
)
{
  int newTail = (itail + 1) % array_capacity;
  if (newTail != ihead)
  {
    myarray[itail] = inserted_value;
    itail = newTail;
  }
  else
  {
    cout << "Queue is full" << endl;
    exit(1);
  }
  cout << "itail: " << itail << endl; 
  cout << "array size" << array_size << endl; 
}
template<class QueueElement>
ostream & operator<<(ostream & o, const dynamic_queue<QueueElement>    &output_elements)
{
o << output_elements;
return o;
}
template<class QueueElement>
void dynamic_queue<QueueElement>::display(ostream &out) const
{
for (int i = ihead;i != itail;i = (i + 1) % array_capacity)
{
    out << myarray[i] << " ";
    cout << endl; 
}
}
template<class QueueElement>
int dynamic_queue<QueueElement>::getSize() const
{
int count = 0; 
for (int i = 0;i <= array_capacity;i++)
{
    count++; 
}
return count; 
}

main function:

#include <iostream>
#include "DynamicCircularQueue.h"
using namespace std; 
int main()
{
    dynamic_queue<int> queue1(5);
    queue1.enqueue(10);
    queue1.enqueue(11);
    queue1.getSize();
    queue1.display(cout);

}

myarray = new QueueElement(initial_capacity);

应:

myarray = new QueueElement[initial_capacity];

由于queue-element是int,所以您只分配了一个元素的数组,这就是为什么您的代码在第二次调用enqueue时崩溃的原因。