данных строки и динамического массива строк. Весь код, который можно обобщить для этих двух типов, должен быть порождён 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
Помогите, как быть?
Фу какая гадость, зачем так убого делать? Касательно различий в логике просто в директивы if endif оборачиваешь и всё
Между этими типами нет различия и так, это один и тот же тип
Хотя... Можно полностью задание увидеть в оригинальном виде?
Обсуждают сегодня