segfault при попытке сохранить основной цикл занятым

Чтобы проверить свое понимание других частей Gtk, я хотел бы написать программу, в которой всегда есть событие, готовое для обработки в основном цикле. Я написал эту короткую программу, чтобы попытаться сделать это:

#include <gtk/gtk.h>

static void toggle(GtkWidget *check, gpointer data)
{
    gboolean checked;
    g_object_get(check, "active", &checked, NULL);
    g_object_set(check, "active", !checked, NULL);
}

int main(int argc, char *argv[])
{
    GtkWidget *window, *check;
    gtk_init(&argc, &argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    check  = gtk_check_button_new();
    g_signal_connect(check, "toggled", G_CALLBACK(toggle), NULL);
    gtk_container_add(GTK_CONTAINER(window), check);
    gtk_widget_show_all(window);
    gtk_main();
}

Когда я запускаю эту программу и ставлю флажок, она дает сбой. Что дает? Как правильно заполнить основной цикл?

(Примечание: он надежно переключается 2048 раз перед segfaulting — подозрительно круглое число.)

6
задан Daniel Wagner 1 June 2012 в 21:47
поделиться