簡體   English   中英

使動態循環隊列,元素輸出正常,但程序崩潰?

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

該程序可以正常編譯,但是當輸出窗口出現時,它會顯示我已輸出的元素,然后我聽到Windows聲音,然后它停止了。

我正在嘗試將元素放入循環隊列中,並且由於顯示功能可以將它們打印出來,因此似乎可以很好地輸入它們。 一切似乎都有意義,但是該程序只是崩潰了,有人可以詳細說明為什么會這樣做嗎? 我的代碼如下:

#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; 
}

主功能:

#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崩潰的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM