我正在尝试使用gtk3创建一个gtk应用程序,该应用程序使用来自mysql数据库的数据。
以下是有问题的代码
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)&#39;失败
有人知道如何解决问题吗?
因为我是stackoverflow的新手,如果我需要发布更多数据或标题不好请发表评论。
答案 0 :(得分:1)
b
的逻辑非常奇怪。第一次运行代码时,b
为0时,您不会调用gtk_list_store_append()
,因此iter1
将保持未初始化状态,从而导致错误。
同样正如Pileborg先生所指出的那样,不要将malloc()
的回报值投下,而在GTK +计划中,请认真考虑使用g_malloc()
。此外,size参数在您的代码中是可怕的,它应该是:
GType* types = g_malloc(num_fields * sizeof *types);