Тут в main() если создавать один или два нода — память не течет. Но если создавать три и более — течет.
Чесслово, три часа не могу понять где я ошибся. Помогите пожалуйста.
T>Тут в main() если создавать один или два нода — память не течет. Но если создавать три и более — течет. T>Чесслово, три часа не могу понять где я ошибся. Помогите пожалуйста.
Ни одного free я не увидел, а список у тебя односвязанный.
Здравствуйте, Kernan, Вы писали:
K>Ни одного free я не увидел, а список у тебя односвязанный.
Тогда почему при создании одного или двух нодов в цикле память не течет?
Здравствуйте, Tasheehoo, Вы писали:
AD>>// pool_last обновить надо бы T>Я не понимаю что я должен тут сделать...
при добавлении элемента в список надо выставить и root и last
после добавления last должен указывать на только что вставленный элемент
root выставляется только один раз, когда список пустой, то есть когда root == NULL
Здравствуйте, Tasheehoo, Вы писали:
AD>>// pool_last обновить надо бы T>Я не понимаю что я должен тут сделать...
void put_elem_mem(item_t *sv)
{
if (!sv || sv->next != NULL)
return;
if (pool_last == NULL)
pool_root = pool_last = sv;
else
{
pool_last->next = sv;
pool_last = sv;
}
// pool_last у тебя здесь не меняется. Он один раз устанавливается в первой ветке if и
// по сути всегда равен pool_root. Вызываешь функцию трижды и второй нод теряешь.
// Как сделать см. выше
}
Здравствуйте, uzhas, Вы писали:
U>при добавлении элемента в список надо выставить и root и last U>после добавления last должен указывать на только что вставленный элемент U>root выставляется только один раз, когда список пустой, то есть когда root == NULL
Я понял! Всем спасибо!
Здравствуйте, andrey.desman, Вы писали:
AD>Не так. Если пошли по первой ветке, то pool_last = pool_last->next нельзя делать, иначе ты тут же потеряешь свой pool_last (он станет NULL).
Я понял! Спасибо!