2015-02-07 40 views
-1

我試圖覆蓋運算符< <爲我的堆棧類打印所有項目,在這種情況下,板,但我收到了分段錯誤。我不知道這意味着什麼或如何解決它。分割錯誤(核心轉儲)當覆蓋運算符<<爲堆棧

ostream& operator << (ostream &out, Stack &stack){ 
     int a = stack.getStackCount(); 
     string outString = ""; 
     PlateNode temp = PlateNode(stack.getTop().getPlate()); 
     for(int i =0;i<a;i++){ 
       outString = outString + ", " + temp.getPlate().getName(); 
       temp = temp.getNextNode(); 
     } 
     out << outString; 
     return out; 
} 

這就是我試圖重寫操作,而我主要是:

int main() 
{ 
    Stack nullStack = Stack(); 
    nullStack.push(pNode); 
    nullStack.push("me"); 
    cout <<"Reached c"<<endl; 
    cout<<nullStack; 
} 

錯誤是不存在的主要是進入最後的前行。 請幫忙!

編輯:這是我整個的代碼是否有幫助,對不起,它不完全註釋:

https://docs.google.com/document/d/16pg01muz0S5IMlXBahdL-JyVE5y7buzOVHYEOn_jyvE/edit?usp=sharing

+1

如果程序崩潰,可能是由於你的Stack類。 – 2015-02-07 03:38:30

+0

你的堆棧類的定義是什麼?我懷疑'PlateNode temp = PlateNode(stack.getTop()。getPlate());'你是問題,因爲你基本上正在創建一個新的堆棧。 – NathanOliver 2015-02-07 03:39:19

+0

分段錯誤是由錯誤的解引用導致的。您發佈的代碼不會考慮任何內容,所以錯誤必須在其他地方。你知道如何使用調試器嗎? – 2015-02-07 03:39:51

回答

0

的問題是在這裏:

class Stack 
{ 
private: 
    PlateNode *ptrTop; 
    int stackCount; 
public: 
    ...  
    Stack(PlateNode top){ 
    *ptrTop = top; 
    stackCount++;} 

你訪問一個未初始化的指針 - 試圖給一個地址分配一些東西,這個地址基本上是隨機的 - 這導致了一種叫做未定義的行爲,這是一件壞事。你大概意思是這樣的:

ptrTop = top; 

無論如何,你應該嘗試進入的每一步發展一小步一小步的新功能(例如新類),測試的習慣。如果你已經這樣做了,你就會知道這個方法是錯誤的;即使你一時無法發現,你也會盯着三條線而不是一百五十條。

+0

這是我最初的方式,但它然後說「不能將plateNode轉換爲plateNode *在賦值中」,並且當我通過ptrTop將*置於*時使用ptrTop = ⊤不起作用 – 2015-02-07 04:01:42

+0

實際使用:ptrTop = ⊤確實有效但分段錯誤仍然存​​在 – 2015-02-07 04:03:59

+1

@ChrisMurphy:我不確定你在那個構造函數中的意圖,我只知道那個代碼導致了未定義的行爲,並且爲指針分配了一個值(正確的類型)不。一般來說,你不能通過盲目添加和刪除'*'和'&'來解決這個問題,你必須明白你想要做什麼。 – Beta 2015-02-07 04:06:35