2012-01-11 49 views
1

或者至少我認爲這個問題涉及某種內存錯誤。我正在使用SFML編寫程序,目前正在使用我爲SFML製作的GUI類來處理菜單。在內部,GUI類使用std :: shared_ptr來管理其所有內部指針。在main()退出並且所有全局析構函數被調用後,程序一直崩潰,gdb說在ntdll!WaitForAlpCompletion中觸發了一個斷點,這導致我相信問題是內存崩潰。每當我從菜單功能中刪除GUI實例化時,它都會退出並關閉而沒有錯誤。這似乎表明GUI是導致崩潰的原因,除了創建和銷燬它們自己的GUI實例的子菜單可以被調用並退出而沒有任何崩潰或斷點。在C++ GUI中查找內存錯誤

一些僞代碼:

SubMenu 
{ 
    Create GUI 
     Do Menu 
    Destroy GUI 
} 

Menu 
{ 
    Create GUI 
     Do Menu?SubMenu 
    Destroy GUI 
} 

main 
{ 
    Init Stuff 
    Menu 
    UnInit Stuff 
    Destroy GUI 
    return 0 
} 

//after return 
Global Dtors 
Breakpoint triggered??? 

我在一個無所適從,這可能是。我計劃在今天的某個時候使用一些內存調試器,但我想知道是否有其他人對此有何看法。

int main() 
{ 
    int *A(new(std::nothrow) int(10)); 
    int *B(A); 

    delete B; 
    delete A; 
} 

是否有你的代碼包含此類似的情況:

+1

爲什麼我們只能看到僞代碼?我懷疑這是你的*設計*這是問題所在。 – 2012-01-11 04:40:52

回答

0

堆損壞可以使用此代碼造成的?

+1

感謝您的指導... – 2012-01-11 04:41:09

2

終於搞清楚了!!!!!事實證明,std :: map在每次重新調整大小時都會調用它的對象的析構函數,導致shared_ptr在內部多次刪除它們的數據。幾個「快速」設計更改和修復:)謝謝你們!