首页 > 解决方案 > GtkTreeIter 指针失败

问题描述

对于 GTK 教程中有关设置树的以下代码:

 /* Create a model.  We are using the store model for now, though we
 * could use any other GtkTreeModel */

 store = gtk_tree_store_new (N_COLUMNS,
                                G_TYPE_STRING,
                                G_TYPE_STRING,
                                G_TYPE_STRING);


GtkTreeIter iter;

gtk_tree_store_append (store, &iter, NULL);

/* Acquire an iterator */

gtk_tree_store_set (store, &iter,
                    WORD, "antidisestablishmentarianism",
                    COUNT, "29",
                    LINES, "1,33,89",
                    -1);


gtk_tree_store_append (store, &iter, NULL);

gtk_tree_store_set (store, &iter,
                    WORD, "monkey",
                    COUNT, "2",
                    LINES, "1,55",
                    -1);

如果我没有传递对 iter 的引用,而是声明一个指针并传递它,则代码将失败:

GtkTreeIter *iter;
gtk_tree_store_append (store, iter, NULL);

知道为什么吗?将不胜感激任何见解谢谢。

标签: gtk

解决方案


GtkTreeIter *iter;
gtk_tree_store_append (store, iter, NULL);

iter 在这里有什么价值?它没有定义。GtkTreeIterstruct 未在任何地方分配。传递这样一个指针就是UB。

您应该将其分配在堆栈 ( GtkTreeIter iter) 或堆 ( GtkTreeIter * iter = g_new (GtkTreeIter, 1))


推荐阅读