首页 > 解决方案 > gtk_list_store_clear() 函数在 C 中引发分段错误

问题描述

我正在用 C 语言编写一个使用 GTK 的程序。我正在使用 GtkListStore 来显示一些来自数据库的数据。在特定信号之后,我想删除 GtkListStore 中的所有行。我使用了 gtk_list_store_clear() 函数,但它引发了分段错误。

我的代码有什么问题?

//Globally declared
GtkListStore *liststore2;

//Inside main() function
liststore2 = GTK_LIST_STORE(gtk_builder_get_object(builder, "liststore2"));

//Inside signal handler function
gtk_list_store_clear(liststore2); //Error comes from here

标签: cgtkgtk3glade

解决方案


如果您g_object_unref(builder)在信号处理程序运行之前销毁构建器对象(使用 ),则 liststore2 可能指向已释放的内存。

如果 liststore2 是独立的(即,没有被其他东西引用,例如 GtkTreeView),就会发生这种情况

gtk_builder_get_object不会增加对象引用计数


推荐阅读