Когда вы объявляете struct room *rooms[max_entries];
, у вас в сегменте данных будет массив max_entries
указателей, которые инициализированы в NULL
.
Поскольку вы не выделяете память для своей комнаты, это означает, что когда вы пишете rooms[i]->room_name
, вы по существу сделали то же самое, что и NULL->room_name
.Механизм защиты памяти вашей системы обнаруживает, что вы хотите получить доступ к части памяти, которая не разрешена, и сигнализирует вам об ошибке сегментации.
Вы должны добавить:
rooms[i] = malloc(sizeof (struct room));
if(!rooms[i]) exit(EXIT_FAILURE); // example error handling, can be different
к вашему циклу.
Кстати: это использование в C для определения макросов во всех заглавных буквах, так что сразу видно, что это макрос.Поэтому вы должны использовать
#define MAX_ENTRIES 5
.