Утечка памяти указателя GString

Я пытаюсь освободить GString * с помощью g_string_freeуказатель был выделен с помощью g_string_sized_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;
}

1 ответ

Вы смешиваете звонки на равнине malloc с завернутым g_free,

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

Используйте обычные или обернутые распределители памяти последовательно.

Другие вопросы по тегам