2015-10-13 83 views
-1

我試圖初始化一個空的堆棧大小爲3,但我的程序不讓我把NULL放入甚至1個元素中。我不確定問題是什麼。當程序嘗試初始化其中一個元素時,該程序停止工作。初始化一個空的堆棧

Stack300::Stack300() 
{ 

for (int i = 0; i < 3; i++) 
{ 
    stackArray[i] = '\0'; 
    //stackArray[i] = i; 
} 

top = 0; 

return; 
} 

我的.h文件。

#ifndef CONGERA2_H 
#define CONGERA2_H 

typedef float Element300; 

class Stack300 
{ 
public: 
    Stack300(); 
    Stack300 (const int); 
    Stack300 (Stack300 &old); 
    ~Stack300(); 
    void push300(const Element300); 
    Element300 pop300(); 
    void viewTB300(); 
    void viewBT300(); 

private: 
    const int MAX_STACK = 80; 
    Element300 * stackArray; 
    int top; 

}; 

#endif 

而我的主文件。

#include <iostream> 
#include "congera2.h" 
using namespace std; 



int main() 
{ 

Element300 temp1 = 1.1; 

Element300 temp2 = 2.2; 

Element300 temp3 = 3.3; 

Stack300 myStack; 

Stack300 myStack2 (myStack); 

/* myStack.push300(temp1); 

myStack.push300(temp2); 

myStack.push300(temp3);*/ 

cout << "hello"; 


return 0; 
} 
+0

你必須表現出更多的代碼,否則這個問題不回答的。 – alain

+1

'stackArray'的定義和初始化在哪裏,它在這裏的範圍? – ElGavilan

+1

你必須分配具有固定大小的stackArray。這是一個例子。 http://www.cplusplus.com/doc/tutorial/ntcs/ – kometen

回答

1

在您的構造函數中,您從不向「stackArray」成員分配任何內存。以下行將完成初始化3個浮點整數的動態數組。

stackArray = new float[3]; 

然後,您將要確保此內存在析構函數中也被釋放。

編輯添加一些有用的資源;這些網頁做好解釋指針和動態內存分配背後的概念: PointersDynamic Memory

+3

這應該是一條評論。 –

+0

我很抱歉,但由於缺乏聲譽,它不會讓我評論。 – Paul

+0

事情是,這是OP的直接問題的答案。 @保羅我會擴展它,並將它變成一個完整的答案。首先,很明顯'stackArray = new Element300 [MAX_STACK];'是OP的目標。爲什麼OP將它的三個要素歸於零,如果我知道的話,就會發生smurfed。爲什麼他們把'char'寫入'float'中,如果我知道的話,又會發生smurfed。嚴重的X-Y行動在這裏進行,但答案是「爲什麼這個崩潰?」是未分配的內存。 – user4581301