Измените структуру MenuItem, чтобы держать указатель на MENUITEM
typedef struct MENUITEM {
char id, count;
char *description;
MENUITEM *items_ptr;
};
Не единственное, что распределение не является хорошим - это будет намного медленнее
count++;
realloc( items_ptr, count * sizeof(struct MENUITEM) );
Лучше было бы выделить блок памяти, скажем, для хранения 50 записей, когда предел достигнут, realloc
это с удвоенным размером блока, и, пожалуйста, убедитесь, что вы не засоряете результат следующим образом:
Правильно:
MENUITEM *temp_items_ptr;
temp_items_ptr = realloc( items_ptr, count * sizeof(struct MENUITEM) );
if (temp_items_ptr != NULL){
items_ptr = temp_items_ptr;
}else{
/* Handle the out of memory situtation */
}
Неправильно:
items_ptr = realloc( items_ptr, count * sizeof(struct MENUITEM) );
Неправильный подход - это рецепт катастрофы и поздороваться с просочившейся памятью!