呈现 window 时出现 Gtkmm 分段错误
Gtkmm Segmentation Fault when presenting window
我正在学习 gtkmm 库,但我 运行 撞墙了。
我使用的是 3.22.2 版本。
当我在主 window 上调用 present 时,我编写的这个简单程序出现段错误,我不明白为什么。
我在下面代码中出现段错误的那一行添加了注释。
#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();
}
方法 createMainWindow 中没有 return 值。 on_active 方法中的指针 mainWindow 可能设置为 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;
}
我正在学习 gtkmm 库,但我 运行 撞墙了。
我使用的是 3.22.2 版本。
当我在主 window 上调用 present 时,我编写的这个简单程序出现段错误,我不明白为什么。
我在下面代码中出现段错误的那一行添加了注释。
#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();
}
方法 createMainWindow 中没有 return 值。 on_active 方法中的指针 mainWindow 可能设置为 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;
}