2017-04-17 50 views
1

我试图释放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; 
} 
+0

什么是valgrind错误信息? –

回答

0

您一再混合纯malloc电话与包裹g_free

rc = (Ports *) malloc (sizeof(Ports)); 
    . 
    . 
    . 
g_free(rc); 

使用普通或包裹的内存分配。

+0

你的回答是没有错的(内存分配器和deallocators应始终成对使用一致),但由于GLib的2.45.5,'g_malloc()'等同于'的malloc()'和'g_free()'等同于'自由()',所以这可能不是问题。 –