unregelmäßige crashs beim schließen (wxWidgets)



  • hallo zusammen,

    ich habe unregelmäßige crashs beim schließen meines programms. die aufrufliste in visual studio verweist leider auf keine stelle in meinem eigenen code, die der auslöser war. kann jemand damit etwas anfangen und mir einen tipp geben?

    mepOhneDll4.exe!wxObject::UnRef() Zeile 321 + 0x6 Bytes C++
    > mepOhneDll4.exe!wxObject::~wxObject() Zeile 413 + 0x18 Bytes C++
    mepOhneDll4.exe!wxGDIObject::~wxGDIObject() + 0xf Bytes C++
    mepOhneDll4.exe!wxFontBase::~wxFontBase() Zeile 130 + 0x8 Bytes C++
    mepOhneDll4.exe!wxFont::~wxFont() Zeile 862 + 0x8 Bytes C++
    mepOhneDll4.exe!wxFont::`scalar deleting destructor'() + 0xf Bytes C++
    mepOhneDll4.exe!wxSystemSettingsModule::OnExit() Zeile 92 + 0x23 Bytes C++
    mepOhneDll4.exe!wxModule::Exit() Zeile 41 + 0x14 Bytes C++
    mepOhneDll4.exe!wxModule::DoCleanUpModules(const wxModuleList & modules={...}) Zeile 197 C++
    mepOhneDll4.exe!wxModule::CleanUpModules() Zeile 57 + 0xd Bytes C++
    mepOhneDll4.exe!DoCommonPostCleanup() Zeile 378 C++
    mepOhneDll4.exe!wxEntryCleanup() Zeile 411 C++
    mepOhneDll4.exe!wxCleanupOnExit::~wxCleanupOnExit() Zeile 118 + 0xc Bytes C++
    mepOhneDll4.exe!wxEntryReal(int & argc=1, wchar_t * * argv=0x01d6aff0) Zeile 460 + 0x3f Bytes C++
    mepOhneDll4.exe!wxEntry(int & argc=1, wchar_t * * argv=0x01d6aff0) Zeile 209 + 0xd Bytes C++
    mepOhneDll4.exe!wxEntry(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * __formal=0x00000000, HINSTANCE__ * formal=0x00000000, int nCmdShow=1) Zeile 386 + 0xd Bytes C++
    mepOhneDll4.exe!WinMain(HINSTANCE
    * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x00151f1d, int nCmdShow=1) Zeile 43 + 0x18 Bytes C++
    mepOhneDll4.exe!__tmainCRTStartup() Zeile 578 + 0x35 Bytes C
    mepOhneDll4.exe!WinMainCRTStartup() Zeile 403 C
    kernel32.dll!7c817077()
    [Unten angegebene Rahmen sind möglicherweise nicht korrekt und/oder fehlen, keine Symbole geladen für kernel32.dll]
    mepOhneDll4.exe!png_set_dither(png_struct_def * png_ptr=0x72006200, png_color_struct * palette=0x65006900, int num_palette=1795191296, int maximum_colors=1912632576, unsigned short * histogram=0x65007600, int full_dither=1761615872) Zeile 280 + 0x13 Bytes C
    69006c00()

    danke!



  • Zeig mal den Code in deiner main().



  • ist leider ein recht komplexes programm mit wxWidgets, das hat keine eigentliche main().

    😉



  • Wieso hat ein wxWidgets-Programm keine main()? Jedes Programm braucht eine main...
    Da das ganze scheinbar beim Beenden passiert, und dann auch nocht in einem wxObject::unref(), könnte es sein, dass du da irgendwas doppelt löschst?

    Ohne Code kann man aber rein gar nix sagen. Erstell dir ein minimales Beispiel, das deinen Fehler enthält.
    Ansonsten bleibt für dich nur: Debugger anwerfen. Der kann dir zu jedem Zeitpunkt sagen, was gerade gemacht wird und welchen Wert die Variablen haben. So kannst du dem eigentlichen Verursacher auf die Pelle rücken.



  • das ganze ist nach folgendem schema eine wxApp:
    http://docs.wxwidgets.org/2.8/wx_wxappoverview.html#wxappoverview

    vielleicht ist dort eine main() enthalten.

    so startet das programm:

    bool App::OnInit() {	
    	// Hauptfenster initialisieren
    	wxFrame *mainFrame = new MainFrame();
    	mainFrame->Show();
    	SetTopWindow(mainFrame);
    
    	return TRUE;
    }
    
    int App::OnExit() {
    	delete SystemState::getInstance();
    	return 0;
    }
    
    IMPLEMENT_APP(App)
    

    der fehler tritt auch leider nicht immer auf, weswegen ich keine minimale version erstellen kann.



  • die unterste debugger meldung sagt etwas über png_set_dither.

    kann das vielleicht damit zusammen hängen, dass ich die debug meldung "Adding duplicate image handler for 'PNG file'" bekomme?
    ich nutze wxBitmapButton mit png bildern über wxInclude http://wiki.wxwidgets.org/Embedding_PNG_Images#wxInclude.
    dazu muss ich wie unten auf der seite beschrieben

    wxImage::AddHandler(new wxPNGHandler);
    

    haben, was die duplicate meldung generiert.

    danke!!!



  • Macro-Magie!


Anmelden zum Antworten