[英]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.