Когда я пытаюсь освободить объект, который является malloc'd, выполнение valgrind, по-видимому, означает, что я сделал вещи хуже. Например, вот мой код:Освобождение делает вещи хуже?
for(next_token = TKGetNextToken(tokenizer); next_token != NULL; next_token = TKGetNextToken(tokenizer))
{
ItemType* item = malloc(sizeof(ItemType));
item->data = to_lower(next_token);
item->fileName = filename;
item->occ = 1;
HM_Put(hm, item);
free(next_token);
}
Теперь, приведенный выше код, я получаю рассказанные байт определенно потеряли на линии, где malloc'd пункт. Однако, если я добавлю бесплатный (элемент) под свободный (next_token), остается не только этот явно потерянный оператор, но я получаю большое количество недопустимых чтений перед сводкой кучи. Я совершенно не понимаю, как это исправить, если кто-нибудь может мне помочь. Спасибо
Добавление 'free' в случайных местах не исправит вашу программу. Вам нужно подумать о времени жизни каждого объекта, который вы выделите, и поместить свой 'free' соответственно. Valgrind может рассказать вам, какие ассигнования не освобождены, но не там, где вы должны были их освободить. –
Какова основная структура данных 'tokenizer'? – Henrik