2013-04-20 33 views
2

我正在爲大學任務製作一個簡單的卡片/卡/面向對象的系統,並且我陷入了這個問題。C++ - 導致SIGSEV信號的空方法

我設置了一個簡單的測試類,它調用對象中的各種方法。

int main() { 
Deck deck = Deck(); 
deck.DisplayDeck(); 
deck.Shuffle(); 
deck.DisplayDeck(); 
Hand hand = Hand(1); 
Card* card; 
card = deck.DealNextCard(); 
hand.AddCard(card); 
hand.ftring(); 
deck.DisplayDeck(); 
} 

,問題就出現在hand.ftring()。當我打電話給它時,會導致分段錯誤。奇怪的是,它不包含代碼。

hand.cpp

string Hand::ftring() { 
} 

如果我刪除它,它運行到完成。如果我添加一個控制檯輸出到方法,它打印它,然後崩潰。我完全不知所措,以什麼做的,因爲調試器只規定

Program received signal SIGSEGV, Segmentation fault. 
In ??()() 
+0

我發現很難相信'g ++'仍然不會默認發出警告(MSVC默認爲C++,C警告)。爲了得到關於這個問題的警告(以及更多),在編譯gcc/g ++時使用'-Wall'選項。 – 2013-04-20 05:35:11

+0

你也可以改變'Hand hand = Hand(1);'只是'Hand hand(1);'並且避免因爲賦值而產生額外的副本。 – stardust 2013-04-20 05:46:50

回答

3

您聲明正在重返ftring功能的字符串,但你實際上並不返回任何東西。這不好。

+0

上帝該死。 這就是爲什麼我更喜歡Java/C#。它指出,當我遲疑地跳過這樣的事情!感謝隊友:) – 2013-04-20 05:21:31

+1

沒問題。 C++有很多問題;我會建議您將編譯器選項設置爲最大嚴格性,並將警告轉換爲錯誤。這會讓你更快地發現問題。 – 2013-04-20 05:23:52

0

您的方法必須返回string - 這是您聲明它的方式。你得到未定義的行爲。