2015-10-04 17 views
1

該程序編譯得很好,但當輸出窗口出現時,它顯示了我輸出的元素,然後我聽到一個窗口聲音,然後它就停止。製作動態循環隊列,元素輸出正常但程序崩潰?

我試圖將元素排入循環隊列,並且由於顯示函數將它們打印出來,因此它們似乎正在被輸入。一切似乎都是有道理的,但程序只是崩潰,有人可以詳細說明爲什麼它可能會這樣做嗎?我的代碼如下:

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


} 
+0

哪條線路發生故障?當隊列函數第二次被調用時,似乎發生了 – MrEricSir

+0

「queue1.enqueue(11);」 ;主要功能第10行。這就是D竊聽者告訴我的 – Armbrust

回答

0

myArray的新= QueueElement(initial_capacity);

應該是:

myarray = new QueueElement[initial_capacity]; 

由於隊列元素是int,你只分配一個元素的數組,這就是爲什麼你的代碼墜毀在第二次調用enqueue

相關問題