Thursday 15 August 2013

c - unicolumn gtktreeview behaves correctly, but multicolumn gives segmentation fault -


मेरे पास GtkTreeView के साथ निम्नलिखित समस्या है।

समस्या तब होती है जब मैं सूची को जोड़ने की कोशिश कर रहा हूँ यह मेरा काम है जो बनाता है:

  स्थिर GtkWidget * setup_list_archive (GtkWidget ** विजेट) {GtkWidget * sc_win; GtkListStore * store; GtkCellRenderer * सेल; GtkTreeViewColumn * column; Sc_win = gtk_scrolled_window_new (NULL, NULL); Gtk_widget_set_usize (sc_win, 250, 150); स्टोर = gtk_list_store_new (COL, G_TYPE_STRING, G_TYPE_STRING); * विजेट = gtk_tree_view_new_with_model (GTK_TREE_MODEL (स्टोर)); सेल = gtk_cell_renderer_text_new (); स्तंभ = gtk_tree_view_column_new_with_attributes ("Klucz", सेल, "पाठ", आईडी, नल); Gtk_tree_view_append_column (GTK_TREE_VIEW (* विजेट), स्तंभ); सेल = gtk_cell_renderer_text_new (); स्तंभ = gtk_tree_view_column_new_with_attributes ("डेटा", सेल, "पाठ", डेटा, नल); Gtk_tree_view_append_column (GTK_TREE_VIEW (* विजेट), स्तंभ); सेल = gtk_cell_renderer_text_new (); स्तंभ = gtk_tree_view_column_new_with_attributes ("गोदजीना", सेल, "पाठ", सीजीएएएस, नल); Gtk_tree_view_append_column (GTK_TREE_VIEW (* विजेट), स्तंभ); // स्क्रॉल व्यवहार gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sc_win), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); Gtk_container_add (GTK_CONTAINER (sc_win), * विजेट); // मुक्त वस्तुओं g_object_unref (G_OBJECT (स्टोर)); वापसी sc_win; }   

और यह मेरी फ़ंक्शन है जो सूची को जोड़ता है।

  स्थिर शून्य सूची_अंड_आर्चिव (GtkWidget * विजेट, gpointer डेटा) {arch * rekord = (arch *) जानकारी; Printf ("कुंजी:% s; pas:% s; dat:% s; \ n", rekord-> id, rekord- & gt; czas, rekord- & gt; डेटा); GtkListStore * store; GtkTreeIter iter; स्टोर = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (विजेट))); Gtk_list_store_append (स्टोर, और amp; iter); Gtk_list_store_set (स्टोर, & iter, आईडी, रिकॉर्ड- & gt; आईडी, डेटा, रिकॉर्ड- & gt; czas, CZAS, रिकॉर्ड- & gt; डेटा, -1); }   

समस्या होती है केवल के साथ multicolumn प्रकार की सूची अगर मैं एक एकल कॉलम के साथ सूची बनाता हूं तो यह ठीक काम करता है।

यहाँ मेरा बैकस्ट्र्रेस है।

  कुंजी: 1; पैस: 14; दिनांक: 2013-06-22 12:24:58; ब्रेकपॉइंट 1, list_add_archive (विजेट = 0x80e0c40, डेटा = 0xbfffe704) पर admin.c: 512 512 gtk_list_store_append (स्टोर, और amp; iter); (जीडीबी) चरण 513 gtk_list_store_set (स्टोर, & iter, आईडी, "ए", डेटा, "बी", सीजीएएस, "सी", -1); (जीडीबी) चरण कार्यक्रम प्राप्त संकेत SIGSEGV, सेगमेंटेशन फॉल्ट /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 (gdb) चरण से g_type_value_table_peek () में 0xb76b8ff5 फ़ंक्शन g_type_value_table_peek से बाहर निकलने तक एकल कदम, जिसमें कोई रेखा संख्या जानकारी नहीं है प्रोग्राम सिग्नल SIGSEGV, सेगमेंटेशन फॉल्ट के साथ समाप्त हुआ कार्यक्रम अब मौजूद नहीं है (जीडीबी) चरण कार्यक्रम चलाया नहीं जा रहा है।   

लाइन g_type_value_table_peek, जिसके पास कोई लाइन संख्या की जानकारी नहीं है ने मुझे लगता है कि संभवतः स्तंभ संख्या को परिभाषित करने वाला मान सही नहीं है, मैंने लिखने का प्रयास किया है केवल मान मानों के बजाय पूर्णांक यह मदद नहीं करता।

जैसा कि आप मेरे debbuger परिणाम की भीख माँग पर देख सकते हैं, स्क्रीन पर प्रिंट प्रिंट क्या होता है और इसलिए डेटास्ट्रक्चर रिकॉर्ड में मान मौजूद हैं और सही हैं । वैसे भी मैं परिमाणों में वर्णों को वर्णित करने की कोशिश की और यह कुछ भी बदल गया।

अगर मैं null को सूची के पैरामीटर के रूप में पास करता हूँ तो यह केवल एक चेतावनी दिखाती है, जैसे अवैध कास्ट एट, निश्चित तौर पर यह न तो काम नहीं करता है :) यह सिर्फ अजीब है कि विभाजन की गलती जैसे कोई गंभीर त्रुटि नहीं है।

मुझे यकीन नहीं है, क्योंकि आप अपने स्थिरांक के मूल्यों को नहीं दिखाते हैं, लेकिन आप 2 कॉलम के साथ एक स्टोर बनाते हैं, मान कर COL बराबर 2: <पूर्व> gtk_list_store_new (COL, G_TYPE_STRING, G_TYPE_STRING);

लेकिन फिर आप 3 मूल्यों को संग्रहीत करते हैं, जो संभव नहीं है क्योंकि बाद का स्तंभ मौजूद नहीं है:

  gtk_list_store_set (स्टोर, & iter, ID, Rekord- & gt; आईडी, डेटा, रिकॉर्ड- & gt; czas, सीजीएएएस, रिकॉर्ड- & gt; डेटा, -1);   

मेरा अनुमान यह है कि आपके पास एक समान संख्या है:

  enum {आईडी, डेटा, सीजीएएएस, सीओएल};   

यदि ऐसा मामला है, col बराबर 3, नहीं 2, और इसलिए स्टोर के अंतिम स्तंभ को एक अनिर्धारित प्रकार मिल रहा है। एक बहुत बुरी स्थिति इसे हल करने के लिए, केवल गायब फ़ील्ड स्टोर निर्माण में जोड़ें:

  gtk_list_store_new (COL, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);   

यदि col 2 के बराबर करता है, तो आपको इसे 3 में बदल देना चाहिए, और 3 प्रकारों को भी जोड़ना होगा।

No comments:

Post a Comment