gcc 4.5.1 c89Невозможно освободить память после использования strdup
Я пытаюсь освободить память. Однако, когда я проверяю valgrind, память не была освобождена. Мне интересно, что я делаю неправильно.
I имеет следующую структуру:
typedef struct tag_cand_results {
char *candidate_winners[NUMBER_OF_CANDIDATES];
} cand_results;
я создаю объект этой структуры:
cand_results *results = NULL;
я выделить память для структуры.
results = calloc(1, sizeof *results);
Назначают некоторые данные к нему
results->candidate_winners[0] = strdup("Steve Martin");
results->candidate_winners[1] = strdup("Jack Jones");
Тогда я пытаюсь освободить всех памяти, выделяемой:
free(results->candidate_winners[0]);
free(results->candidate_winners[1]);
free(results);
Just to be safe assign to NULL
results = NULL;
я получаю следующий выход из Valgrind.
==8119== 72 bytes in 6 blocks are definitely lost in loss record 1 of 2
==8119== at 0x4A05E46: malloc (vg_replace_malloc.c:195)
==8119== by 0x3FE2E82A91: strdup (strdup.c:43)
==8119== by 0x400E5A: main (driver.c:116)
==8119==
==8119== 72 bytes in 6 blocks are definitely lost in loss record 2 of 2
==8119== at 0x4A05E46: malloc (vg_replace_malloc.c:195)
==8119== by 0x3FE2E82A91: strdup (strdup.c:43)
==8119== by 0x400E72: main (driver.c:117)
Я не знаю, почему память не была освобождена?
Большое спасибо за любые предложения,
Вы можете разместить наименьшее * полная * Программа, о которой Valgrind еще жалуется таким образом. – NPE
Что-то происходит в другом месте моего исходного кода. Просто отправил комментарий в Pax ниже. – ant2009