जीटीके के अन्य बिट्स की मेरी समझ का परीक्षण करने के लिए, मैं एक ऐसा प्रोग्राम लिखना चाहता हूं जिसमें मुख्य लूप का उपभोग करने के लिए हमेशा एक ईवेंट तैयार हो। मैंने यह छोटा कार्यक्रम यह करने के लिए लिखा:segfault
#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();
}
जब मैं इस प्रोग्राम को चलाता हूं और चेक बॉक्स पर क्लिक करता हूं, तो यह segfaults। क्या देता है? मुख्य लूप व्यस्त रखने का सही तरीका क्या है?
(साइड नोट: यह मज़बूती से 2048 गुना segfaulting से पहले टॉगल - एक संदेह से दौर संख्या।)
एक डिबगर के माध्यम से भागो यह और एक पश्व-अनुरेखन प्राप्त करने की कोशिश की संभावना का संकेत भेजा हो तुल्यकालिक रूप से, और आपको एक स्टैक ओवरफ़्लो मिलेगा। – nos
@nos एक स्टैक ओवरफ़्लो मैं समझ सकता था (क्योंकि, जैसा कि आप कहते हैं, सिग्नल सिंक्रनाइज़ेशन भेजते हैं), लेकिन यह वह व्यवहार नहीं है जिसे मैं देखता हूं। –
@ नोस क्षमाप्रार्थी; कुछ गुगलिंग के बाद, ऐसा लगता है कि ढेर बहने से वास्तव में एक सीगफॉल्ट हो सकता है। धन्यवाद! –