2014-05-07 90 views
0

我想使用gtk3使用來自mysql數據庫的數據的gtk應用程序。錯誤創建gtk列表視圖

這是當我嘗試運行PROGRAMM我看到這個錯誤,有一個問題

GType* types = (GType*) malloc(num_fields * sizeof(G_TYPE_STRING)); 
    for(i = 0; i < num_fields; i++) { 
     types[i] = G_TYPE_STRING; 
    } 
    store = gtk_list_store_newv(num_fields, types); 

    b=0; 
    while ((row = mysql_fetch_row(result))) 
    { 
     if (b==0) b=1; 
     else gtk_list_store_append (store, &iter1); 
     for(i = 0; i < num_fields; i++) 
     { 
      if (i == 0) while((field = mysql_fetch_field(result))!=NULL) mdata[i]=field->name; 
      else 
      { 
       GValue val = G_VALUE_INIT; 
       g_value_init(&val, G_TYPE_STRING); 
       g_value_set_string (&val,row[i]); 
       gtk_list_store_set_value (store, &iter1,i-1,&val); 

      }   
     } 
    } 

代碼:

GTK的CRITICAL **:gtk_list_store_set_value:斷言`iter_is_valid(ITER,list_store )'失敗

有沒有人有一個想法如何解決這個問題?

因爲我是新來的stackoverflow,如果有更多的數據我需要發佈或標題不好請評論。

+0

只是爲了您的信息,[不投的'malloc'在C回報(http://stackoverflow.com/questions/ 605845/DO-鑄最結果-的-的malloc)。 –

回答

1

b的邏輯是超奇怪的。當您第一次運行代碼時,當b爲0時,您將不會調用gtk_list_store_append(),因此iter1將保留未初始化並導致錯誤。

也正如Pileborg先生所指出的,不要投入malloc()的返回值,並且在GTK +程序中認真考慮使用g_malloc()來代替。另外,大小參數是在你的代碼可怕的,它應該是:

GType* types = g_malloc(num_fields * sizeof *types); 
+0

謝謝! iter未初始化,導致錯誤消息 – mark4rd

+2

也可能需要使用'g_new()'而不是'g_malloc()'。或者使用gtk_list_store_new()以GType參數的0結尾列表來避免分配。 – ebassi