169 похожих чатов

Здравствуйте, есть такое задание: 'Не должно быть дублирования кода между типами

данных строки и динамического массива строк. Весь код, который можно обобщить для этих двух типов, должен быть порождён function-like макросами.'
Рассмотрим функцию удаления элемента из динамического массива:
void dyn_arr_##T##_remove(dyn_arr_##T** self, size_t index) { \
dyn_arr_##T* new_arr = malloc(sizeof(dyn_arr_##T)); \
alloc_guard(new_arr); \
init_dyn_arr_##T(new_arr); \
for (size_t i = 0; i < (*self)->len; i++) { \
if (i != index) { \
dyn_arr_##T##_add_last(new_arr, &((*self)->data[i])); \
} \
} \
free((*self)->data); \
*self = new_arr; \
} \
Вроде бы всё ок, но с моей точки зрения у дин.массива символов и дин.массива строк совсем разная логика, во втором случае мы должны сделать free поля data структуры, а в случае дин.массива символов, мы этого сделать не можем(потому что там просто символ лежит, не указатель) и в итоге у нас утечка ибо мы не сделали free для полей элемента, который хотим удалить
вот полный код хедера: https://godbolt.org/z/Wj3rxGMcb
Помогите, как быть?

3 ответов

29 просмотров

Фу какая гадость, зачем так убого делать? Касательно различий в логике просто в директивы if endif оборачиваешь и всё

Между этими типами нет различия и так, это один и тот же тип

Хотя... Можно полностью задание увидеть в оригинальном виде?

Похожие вопросы

Обсуждают сегодня

Интересно, нет ли какого-то способа получить из dll не адрес самой метки, а адрес со смещением?
The Bird of Hermes
54
Делал задачу вот такую https://stepik.org/lesson/4985/step/9?unit=1083 получилось такое https://play.haskell.org/saved/ipKrepqe оно работает, тестов много не писал, но работае...
Fedor
22
Почему спрашиваю - поймал падение на совершенно уже пустом проекте, хочу до минимального повторяемого свести... Такой вопрос - вот эти юниты, перечисленные в инспекторе объек...
notme
6
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Сообщение* в закодированном виде. То есть, просто сделать sendMessage?text=Привет бла-бла! не получится, надо в HEX переводить, и добавлять процент, типа такого: sendMessage?t...
КТ315
21
А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Друзья, за кем?
Magic
12
А шо, ты этой библиотекой пользуешься?
Darkanronpa Dark Hole
10
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Всем привет. Кто-то может подсказать, как можно перевести значения Selection поля, если список значений в нем формируется динамически? Я изначально их получаю из selection дру...
Наталья Селезнева
6
Карта сайта