realloc
в порядке ... но продолжайте читать:)
realloc
не будет перемещать части памяти; это может переместить весь блок. Поэтому вам необходимо скопировать данные перед изменением выделенного размера.
Чтобы переместить данные, memmove
(не memcpy
) - хороший вариант: он работает для областей памяти, которые принадлежат одному и тому же объекту. Обратите внимание, чтобы не выходить за пределы вашего массива, хотя; как вы делаете в своем коде.
for (i = pos; i < arr_len; i++) {
arr[i] = arr[i+1];
}
arr[i] = arr[i + 1];
попытается получить доступ к значению, превышающему допустимый. Вам нужно
for (i = pos + 1; i < arr_len; i++) {
arr[i - 1] = arr[i];
}
При вызове realloc
возникают некоторые накладные расходы. Если ваши структуры невелики и / или они живут только в течение короткого времени, рассмотрите возможность сохранения количества элементов и выделенного количества, а также только realloc для увеличения (когда (element_count + 1) > (allocated_count)
).
Если структура большая, также рассмотрим другую структуру данных (возможно, связанный список).