我有一個遊戲,剝離的問題,一個GameHandler類,一個遊戲類和一個網格類。對象似乎刪除本身或構造函數後更改內存
GameHandler類在其頭文件中聲明瞭一個Game對象。該GameHandler構造然後重新構建遊戲對象,所以
game = Game();
遊戲中有一個指針指向一個網格對象的聲明在它的頭文件。構造函數然後定義該Grid對象:然後我可以繼續玩遊戲直到最後(通過死亡或完成)。當我完成了比賽,GameHandler給了我重新開始的選擇,而要做到這一點,我想我會簡單地重新設置遊戲狀態,然後再次調用
game = Game();
。這並沒有抱怨,它似乎創建了一個新的遊戲對象,從而創建了一個新的網格。這次,在構建網格之後,使用VS2010並查看當地人,到網格開始更新或繪製時,網格中所有變量的位置都指向0xfeeefef2或類似的數據,即數據已根據幾次搜索在程序運行期間被刪除。這個被刪除的唯一地方是在遊戲的破壞者中。
因此,我現在的假設是我覆蓋了遊戲對象,然後我覆蓋的對象決定稱它爲析構函數,然後將網格清空,並將其留空。我真的沒有線索,所以任何見解都會很好。
顯示你的測試用例。 – 2012-01-04 00:53:28
請同時顯示您的副本構造函數,賦值運算符以及Game和Grid的析構函數。 – dasblinkenlight 2012-01-04 00:56:36
這很可能是Lightness指出的複製構造函數問題。不過,我會建議,在這種情況下,您只需爲Game定義一個「重置」方法,然後調用該方法而不是創建新對象。我在這裏創建和複製Game對象時看不到任何價值。如果您真的想銷燬Game對象並創建一個新對象,請改用智能指針,以便不調用副本。 – Gerald 2012-01-04 01:14:25