【问题标题】:Why the segmentation fault while trying to populate a gtk_list?为什么在尝试填充 gtk_list 时出现分段错误?
【发布时间】:2019-03-01 01:45:23
【问题描述】:

我想填充一个 gtk2 gtk_list 并在函数中尝试这段代码:

GList (*List) = NULL;
GtkWidget (*ListBox) = gtk_list_new();
List = g_list_prepend(List, "List Item");
gtk_container_add(GTK_CONTAINER(Vbox), ListBox);
gtk_list_prepend_items(GTK_LIST(ListBox), List);

我确信我的功能没有任何问题。我得到一个分段错误?为什么?我究竟能做些什么来解决它?

【问题讨论】:

    标签: c segmentation-fault gtk2


    【解决方案1】:

    您在混合使用 GList已弃用 GtkList 列表函数。

    旧的GtkList 已弃用,与GList 不同。注意:

    GList (*List) = NULL;
    ...
    List = g_list_prepend(List, "List Item");
    /* now you switch to gtk_list_... and GtkList */
    gtk_container_add(GTK_CONTAINER(Vbox), ListBox);
    gtk_list_prepend_items(GTK_LIST(ListBox), List);
    

    解决方案:只使用GListg_list... 函数,避免使用已弃用的GtkListgtk_list... 对应项。 GListg_list... 旨在替换早期的类型和函数,并且在您的 Gtk+2 应用程序中编译时可以无缝工作。

    【讨论】:

    • 我该怎么做
    • 只需使用GListg_list... 类型和函数,而不是GtkListgtk_list..。基本上GListg_list.. 是当前glib 支持的。虽然您应该仍然可以使用 GtkListgtk_list.. 变体,但不要。它们可能会完全从 glib 中删除(如果还没有的话)。最大的问题是“你不能混合它们......”
    • 什么是“gtk_list...” 什么是“...”
    • 抱歉,这只是gtk_list_(put_applicable_name_here)。这只是前缀。例如。 gtk_list_prepend_items 是弃用版本 g_list_prepend 是当前版本。见GList family of functions(他们甚至在页面上有不错的例子——很少见)
    • 我正在尝试制作将在屏幕上显示的列表框。按照我的理解,您使用gkt_list_... 创建要显示的小部件,并使用GListg_list_... 添加的项目使其显示项目
    猜你喜欢
    • 2020-11-24
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 2023-03-18
    • 2016-02-02
    • 2017-11-12
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多