В общем например такое, имеем массив указателей на указатели на строку
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 мегабайт.
Ребят у меня когнитивный диссонанс и вопрос, а можно как то хитро поступить?


