【发布时间】:2018-02-04 21:14:44
【问题描述】:
我是使用 GTK+ 和 C 编写一个小应用程序的初学者。我正在为GtkTreeView设置一个过滤器,显示功能如下,主要是从here复制的。
static gboolean filter_func (GtkTreeModel *model, GtkTreeIter *row, gpointer data) {
// if search string is empty return TRUE
gchar *titleId, *region, *name;
gtk_tree_model_get (model, row, 0, &titleId, 1, ®ion, 2, &name, -1);
// get search string
if (strstr (titleId, "search text here") != NULL) {
return TRUE;
}
g_free (titleId);
g_free (region);
g_free (name);
return FALSE;
}
到目前为止,我假设malloc() 需要free(),阅读https://developer.gnome.org/glib/stable/glib-Memory-Allocation.html 告诉我:
匹配
g_malloc()(以及g_new()等包装器)很重要g_free()
如果是这样,那么为什么在这里调用g_free()?这很重要的原因是因为在搜索中键入的每个字符都会调用此代码数千次。
【问题讨论】:
-
您没有正确复制。在您链接的文本中,
g_free也会被调用,以防返回TRUE。如果满足条件,您的代码会产生内存泄漏。 -
@Gerhardh 对,谢谢。
-
因为
gtk_tree_model_get正在调用g_malloc