创建gtk列表视图时出错

时间:2014-05-07 14:29:51

标签: mysql c gtk gtk3

我正在尝试使用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的新手,如果我需要发布更多数据或标题不好请发表评论。

1 个答案:

答案 0 :(得分:1)

b的逻辑非常奇怪。第一次运行代码时,b为0时,您不会调用gtk_list_store_append(),因此iter1将保持未初始化状态,从而导致错误。

同样正如Pileborg先生所指出的那样,不要将malloc()的回报值投下,而在GTK +计划中,请认真考虑使用g_malloc()。此外,size参数在您的代码中是可怕的,它应该是:

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