LINUX.ORG.RU

Удалять или нет?

 , , ,


0

1

В общем например такое, имеем массив указателей на указатели на строку

char ** keys;
Ну допустим есть функция которая из базы получает строку и другая которая делает realloc расширяя keys и добавляет туда указатель на строку
setkey(keys,get_user_id_from_username("Tolik-alcogolik"));
И этих setkey к примеру мы имеем несколько тысяч они там используются в программе и вот тут делема делать ли функцию delkey(char ** key, char * keyname);? Так как где то в середине программы значение под индексом 3562 уже не нужно и хорошо бы удалить через free() строку которую выплёвывает get_user_id_from_username(); но! вот тут самое интересное и лично мне неприятное, а именно то что изи делаем free() на нужную строку, а в позиции указателя на строку вбиваем NULL, но блин массив keys как рос так и будет расти, да можно (а может нужно) сместить элементы массива выше заняв уже пустующее место и сделать realloc() на весь массив удалив хвост, с одной стороны не хочется иметь «дырявый» и вечно растущий массив (пусть он при огромных индексах и занимает крохотные килобайты) с другой стороны затраты на удаление элемента из массива с смещением приводит к циклу с интерацией равной количеству нижележащих элементов массива, а потом ещё новая аллокация то есть копирование всего добра в новое место, за то на sizeof(char**) освободили память.

Я понимаю кто-то скажет байтодрочерство те типа чё жалко что «утёчёт» 10 килобайт да и хрен с ними забей, а кто-то скажет, что за вопрос память надо удалять если она не используется и не важно это 32 байта или 320 мегабайт.

Ребят у меня когнитивный диссонанс и вопрос, а можно как то хитро поступить?

Deleted

Последнее исправление: Deleted (всего исправлений: 1)

Случайно не для этого используют списки? Или я что-то не понял? Не оч хорошо вот такой массив строк хранить, особенно если часто меняются.

I-Love-Microsoft ★★★★★
()

А порядок вообще важен? Если нет, то можно поставить последний элемент на место удалённого и уменьшить длину массива на единицу (следующий realloc() просто ничего делать не будет).

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

...я дебил, спасибо. Думаю пора всё же поспать ::)

Deleted
()
Ответ на: комментарий от I-Love-Microsoft

Да ты всё правильно понял и правильно сказал, можно и списком, спасибо, просто я нереально туплю в данный момент.

Deleted
()

Икс игрек проблема. Зачем этот массив, как его используют. Похоже на гц-подобный костыль из-за неправильного учета лайфтаймов.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.