Gtk GString指针内存泄漏

Gtk GString指针内存泄漏,gtk,glib,gstring,Gtk,Glib,Gstring,我试图使用g\u string\u free释放GString*,指针是使用g\u string\u size\u new分配的。但valgrind也给出了同样的内存泄漏 示例代码: Ports * function(bs_t *bs) { GString *string = g_string_sized_new(PATH_MAX); char template[] = "/tmp/grokXXXXXX"; Ports *rc =NULL; if (condit

我试图使用
g\u string\u free
释放
GString*
,指针是使用
g\u string\u size\u new
分配的。但valgrind也给出了同样的内存泄漏

示例代码:

Ports * function(bs_t *bs)
{
    GString *string = g_string_sized_new(PATH_MAX);
    char template[] = "/tmp/grokXXXXXX";
    Ports *rc =NULL;

    if (condition) {
        rc = (Ports *) malloc (sizeof(Ports));
        if (rc == NULL) {
            g_string_free(string, TRUE);
            return NULL;
        }
    }

    if (condition_2) {
        if (!port_file(string->str, &rc->ports[0], &rc->port_valid, 
            NUM_RC_PORTS))
        {
            g_free(rc);
            rc=NULL;
        }
    }
    g_string_free(string, TRUE);
    return rc;
}

您将对普通
malloc
的调用与包装的
g_free
混合使用,


一致使用普通或包装内存分配器。

您将对普通
malloc
的调用与包装
g_free
混合使用,


始终使用普通或包装内存分配器。

您的答案没有错(内存分配器和释放定位器应始终成对使用),但由于GLib 2.45.5,
g_malloc()
相当于
malloc()
g_free()
相当于
free()
,这可能不是问题所在。您的答案没有错(内存分配器和释放定位器应该始终成对使用),但由于GLib 2.45.5,
g_malloc()
相当于
malloc()
g_free()
相当于
free()
,这可能不是问题所在。什么是valgrind错误消息?什么是valgrind错误消息?
 rc = (Ports *) malloc (sizeof(Ports));
    .
    .
    .
 g_free(rc);