2017-04-17 13 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

당신은 지속적으로 감싸 g_free

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

를 사용하여 일반 또는 포장 메모리 할당자를 일반 malloc에 대한 호출을 혼합한다.

+0

대답은 잘못이 아닙니다 (메모리 할당 자와 할당 취소자를 항상 일관되게 사용해야합니다). GLib 2.45.5부터'g_malloc()'은'malloc()'과 같고'g_free()'는'free()', 그래서 그것은 아마도 여기서 문제가되지 않습니다. –