В вашей функции main
, snake
никогда не инициализируется, и поэтому его член p_snake
остается указателем на какое-то произвольное место в памяти. Затем вы пытаетесь записать в эту память в пределах fillWithPointer
, что вам не разрешено, поэтому возникает ошибка сегментации.
Чтобы исправить эту ошибку, выделите часть памяти для snake
либо в стеке или куча. Один из способов достижения sh заключается в следующем:
int main(void) {
screen_type screen = {{{0}}};
snake_type snake = {&screen};
fillSnake(&snake);
return 0;
}
Обратите внимание, что, поскольку экран уже инициализирован нулями, ваши функции fillWithPointer
становятся излишними.