的GString指针内存泄露
问题描述:
我试图释放GString *
使用g_string_free
,指针使用g_string_sized_new
分配。但valgrind会给内存泄漏。的GString指针内存泄露
示例代码:
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
,
rc = (Ports *) malloc (sizeof(Ports));
.
.
.
g_free(rc);
使用普通或包裹的内存分配。
+0
你的回答是没有错的(内存分配器和deallocators应始终成对使用一致),但由于GLib的2.45.5,'g_malloc()'等同于'的malloc()'和'g_free()'等同于'*()',所以这可能不是问题。 –
什么是valgrind错误信息? –