2012-01-11 6 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??? 

私は、これは何ができるかに関して、途方に暮れてよ。今日はいつかvalgrindのようなメモリデバッガを使うつもりですが、他に誰かがこれが何であるかについてのアイデアがあるのだろうかと思っていました。

+1

私たちはなぜ擬似コードを見るだけですか?私はそれがあなたの*デザイン*の問題だとは思っていません。 –

答えて

0

ヒープの破損がこのコードで発生する可能性があります。

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

    delete B; 
    delete A; 
} 

はあなたのコードのいずれかがこの似たような状況が含まれていますか?

+1

あなたのガイダンスをありがとう... –

2

最後に見つけた!!!!! std :: mapはサイズ変更されるたびにオブジェクトのデストラクタを呼び出し、shared_ptrの内部でデータを数回削除することが判明しています。いくつかの "クイック"デザインの変更と固定:)おかげでみんな!