【问题标题】:C GTK - SIGSEGV when trying to get index number of last item in TreeViewC GTK - 尝试获取 TreeView 中最后一项的索引号时的 SIGSEGV
【发布时间】:2020-04-09 23:07:44
【问题描述】:

我正在尝试获取 GTK TreeView 中选定项目的索引值,以便使用该索引从匹配的值数组中删除该值。我的代码对 TreeView 中的所有项目都成功地执行了此操作,但列表中的最后一项除外。尝试删除最后一项时出现此错误:

(SDS-CW:32229): Gtk-CRITICAL **: 00:07:38.494: gtk_list_store_get_path: assertion 'iter->stamp == priv->stamp' failed

(SDS-CW:32229): Gtk-CRITICAL **: 00:07:38.494: gtk_tree_path_get_indices: assertion 'path != NULL' failed

这是我的代码:

void remove_hash(GtkWidget *widget, gpointer user_data) {

    struct data *dataStruct = user_data;

    GtkListStore *store;
    GtkTreeModel *model;
    GtkTreeIter iter;
    GtkTreePath *path;
    GtkTreeSelection *selectedHash = dataStruct->selectedHash;
    int removeIndex;

    store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(list)));
    model = gtk_tree_view_get_model(GTK_TREE_VIEW(list));

    if (gtk_tree_model_get_iter_first(model, &iter) == FALSE) {
        return;
    }

    if (gtk_tree_selection_get_selected(GTK_TREE_SELECTION(selectedHash), &model, &iter)) {
        gtk_list_store_remove(store, &iter);
    }

    path = gtk_tree_model_get_path(model, &iter);   <-- This appears to be returning NULL
    removeIndex = *gtk_tree_path_get_indices(path) + 1;   <-- Error occurs here, I believe

    g_print("Remove Index: %i\n", removeIndex);
    g_print("Remove Hash: %s\n", dataStruct->queuedHashes[removeIndex][0]);

    // Function continues below, but error occurs above

有谁知道我哪里出错了?

任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 如果选择了最后一项,gtk_list_store_remove 使iter 无效。我认为您需要在调用 gtk_list_store_remove 之前获取 removeIndex。
  • @JohnKoch 啊,是的,我是个白痴,应该发现那个。我在想它需要的复杂得多。谢谢!您能否发布答案,以便我接受您代表的解决方案?

标签: c segmentation-fault gtk


【解决方案1】:

根据Gtk3 doc,gtk_list_store_remove

从列表存储中删除给定的行。删除后,iter 被设置为下一个有效行,如果它指向 list_store 中的最后一行,则它无效。

您需要在调用 gtk_list_store_remove 之前获取removeIndex

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多