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