Инкапсулируйте реализацию динамического массива с помощью malloc / realloc в паре файлов .h / .c для более легкого использования.
static int length = 0;
PACKET *dynamic_array_put(PACKET *list, const PACKET new) {
PACKET *ret_val = NULL;
ret_val = realloc(list, sizeof(PACKET) * (length + 1));
if (ret_val == NULL) {
/* Not enough memory */
return NULL;
}
memmove(list + length, &new, sizeof(PACKET));
length++;
return ret_val;
}
PACKET *dynamic_array_get(PACKET *list, int index) {
PACKET *p = NULL;
p = malloc(sizeof(PACKET));
if (p == NULL) {
/* Not enough memory */
return NULL;
}
memmove(p, list + index, sizeof(PACKET));
return p;
}
PACKET *dynamic_array_remove(PACKET *list, int index) {
PACKET *ret_val = NULL;
PACKET tmp;
memmove(&tmp, list + index, sizeof(PACKET));
memmove(list + index, list + index + 1,
sizeof(PACKET) * (list - index - 1));
ret_val = realloc(list, sizeof(PACKET) * (list - 1));
if (ret_val == NULL) {
/* Not enough memory, restore! */
memmove(list + index + 1, list + index,
sizeof(PACKET) * (list - index - 1));
memmove(list + index, &tmp, sizeof(PACKET));
return NULL;
}
length--;
return ret_val;
}
Если пространство памяти не является проблемой, вы можете распределять память по блокам,вместо каждого добавления ПАКЕТОВ и ускорить среднее добавление.