Saya mempelajari perpustakaan gtkmm dan saya langsung menabrak dinding bata.

Saya menggunakan versi 3.22.2.

Program sederhana yang saya tulis ini mendapatkan kesalahan seg ketika saya memanggil hadir di jendela utama dan saya tidak tahu mengapa.

Saya menyertakan komentar dalam kode di bawah ini pada baris yang segfaults.

#include <gtkmm.h>

using namespace Gtk;
using namespace std;

class App : public Application {
protected:
    App() : Application() {}

    void onWindowHide( Window *window ) { delete window; }

    void on_activate() override {
        ApplicationWindow *mainWindow = createMainWindow();
        mainWindow->present(); // it gets a SEG_FAULT here
    }

    ApplicationWindow *createMainWindow() {
        Gtk::ApplicationWindow *mainWindow;
        mainWindow = new ApplicationWindow();
        add_window( *mainWindow );
        mainWindow->signal_hide()
                  .connect( sigc::bind<Gtk::ApplicationWindow *>(
                          sigc::mem_fun( *this, &App::onWindowHide ), mainWindow ));
    }

public:
    static Glib::RefPtr<App> create() {
        return Glib::RefPtr<App>( new App());
    }
};


int main( int argc, char *argv[] ) {
    auto app = App::create();
    return app->run();
}
0
Person93 19 Januari 2018, 23:22

1 menjawab

Jawaban Terbaik

Tidak ada nilai kembalian dari metode createMainWindow. pointer mainWindow dalam metode on_active mungkin disetel ke nullptr.

 ApplicationWindow *createMainWindow() {
    Gtk::ApplicationWindow *mainWindow;
    mainWindow = new ApplicationWindow();
    add_window( *mainWindow );
    mainWindow->signal_hide()
              .connect( sigc::bind<Gtk::ApplicationWindow *>(
                      sigc::mem_fun( *this, &App::onWindowHide ), mainWindow ));
    return mainWindow;
} 
1
Noè Murr 27 Januari 2018, 19:08