2017-04-17 22 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()'等同於'自由()',所以這可能不是問題。 –