0
我一直在困惑我的程序的行爲與某些對象分配一段時間了。在void函數中創建(大)對象失敗原因不明
我main()
函數運行,像這樣:
const int numOpts = 3;
string opts[numOpts] = { "Play", "Settings", "Quit" };
// 0 1 2
for (;;)
{
int choice = input(numOpts); // returns 0, 1, or 2
if (choice == 0)
{
Game b; // 9
b.start(); // 10
}
else if (choice == 1)
settings(); // edits global variables
else
break;
}
但是,當我試圖把線9並在自己的void
功能10(Game b; b.start();
),
static void startGame();
int main()
{
...
if (choice == 0)
startGame();
...
}
static void startGame()
{
Game b;
b.start();
}
程序很快崩潰(分段錯誤)在循環的一次迭代之後。在Xcode中,main()
在致電startGame()
後似乎忘記了所有變量。同樣,
static void startGame()
{
Game* b = new Game;
b->start();
delete b;
}
也失敗:但不是在我自己的操作系統(OS X)上,而是在Linux機器上。這個輸出失敗如下所示:*** glibc detected *** ./Game: free(): invalid next size (fast): 0x0000000001b41d60 *** ...
。
這些問題有關嗎?我懷疑main()
的堆棧數據在某種程度上被釋放,但如果是這樣,爲什麼第一個實現工作,但不是接下來的兩個?
函數'startGame'顯然不是問題,'main'堆棧在應用程序終止前不會被釋放。你的代碼中必然存在一些錯誤(很可能與指針和內存分配有關),這些錯誤在某些情況下才會出現。 – 2014-08-31 00:59:48
除非您的遊戲非常短,否則您可能不希望它超出範圍或在創建後立即將其刪除。 – 2014-08-31 01:01:43
@MartinLiversage這聽起來很正確。 – plunk654 2014-08-31 01:06:56