Я думаю, что ваша проблема лежит здесь:
int next_index = sizeof(struct myInfo) * ...
*(queue + (next_index)) = info;
Вы масштабируете next_index
по размеру вашей структуры, но это то, что автоматически выполняется этим вторым утверждением - *(queue + (next_index))
эквивалентно queue[next_index]
, и последнее более читабельно для всех, кроме тех, кто использовал C, так как K & R был впервые опубликован: -)
Другими словами, next_index
должно быть значением от 0
до MAX_QUEUE-1
, поэтому попробуйте изменить первый оператор для удаления умножения на sizeof(struct myInfo)
:
void push(struct myInfo info) {
int next_index = (queue_size + queue_head) % MAX_QUEUE;
printf("Pushing %s to %d\n", info.data, next_index);
queue[next_index] = info;
queue_size++;
}
И имейте в виду, что вы в конечном итоге переполните queue_size
в этом вашем бесконечном цикле. Предположительно вы будете проверять, чтобы queue_size
не увеличивалось после MAX_QUEUE в конечном готовом к использованию коде, да?