2013-06-18 80 views
0

我正在使用SDL在C++中進行遊戲。我有主要功能女巫只需要運行遊戲功能。運行遊戲功能運行遊戲,退出時應返回0。我曾嘗試在每次調用之前和之後打印事件,並在返回0時發生段錯誤;遊戲中的C++分段錯誤

functioncall() 
{ 

    Loads of SDL and other stuff 

    SDL_Quit(); 
    gamestatemanager.~Gamestatemanager(); 
    return 0; // This is probably where i get the seg fault 
} 
+0

就讓gamestatemanager走出去的範圍,而不是調用它的析構函數。 – billz

+0

問題是什麼? – Kamouth

+0

您可以通過新創建它,然後通過刪除來銷燬它。 –

回答

3

如果這是gamestatemanager的析構函數,那麼您不應該明確地調用它。

它在對象系統清理對象時被調用。

如果它創建爲一個局部變量的東西,如:

Gamestatemanager gamestatemanager; 

那麼當它超出範圍也將被清理。如果它被分配到new,那麼你應該delete它,在這一點上它將被清理。

什麼你可能會發現這裏是你自己調用析構函數,那麼它再次當對象超出範圍稱爲。這是不太可能:-)

0

爲對象的析構有好下場的,將自動調用時該對象超出範圍。沒有必要明確地調用它。

int functioncall() 
{ 
    Gamestatemanager gamestatemanager; 
    ... 
    SDL_Quit(); 
    return 0; 
} // The destructors for all local objects are called. 
0

我想gamestatemanager是一個局部變量。

您正在顯式調用它的析構函數,然後編譯器會再次隱式調用析構函數(同時從函數functioncall()返回時清除堆棧),這會導致段錯誤。

擺脫gamestatemanager.~Gamestatemanager();,它應該是罰款。隱式堆棧解包過程中會調用析構函數。