Я делаю код игры жизни Конвея. Я использую функцию для проверки всех ячеек, окружающих каждую живую ячейку, и запоминаю, сколько раз они появляются. Я сохраняю результаты в двумерном массиве под названием Surroundlist.
void updateAlive(){
int surroundlist[sizeX][sizeY],i,j;
for (j=0; j<sizeY; ++j){
for (i=0; i<sizeX; ++i){
surroundlist[i][j]=0;
}
}
for (i=0; i<alivecells; ++i){
++surroundlist[(alive[i].Xcoord-1)][(alive[i].Ycoord-1)];
++surroundlist[(alive[i].Xcoord)][(alive[i].Ycoord-1)];
++surroundlist[(alive[i].Xcoord+1)][(alive[i].Ycoord-1)];
++surroundlist[(alive[i].Xcoord-1)][(alive[i].Ycoord)];
++surroundlist[(alive[i].Xcoord+1)][(alive[i].Ycoord)];
++surroundlist[(alive[i].Xcoord-1)][(alive[i].Ycoord+1)];
++surroundlist[(alive[i].Xcoord)][(alive[i].Ycoord+1)];
++surroundlist[(alive[i].Xcoord+1)][(alive[i].Ycoord+1)];
}
}
alive - это структура, содержащая координаты x и y каждой живой ячейки, показанные здесь:
typedef struct {//structure contains all alive cells
int Xcoord;//x coord of alive cell
int Ycoord;//y coord of alive cell
} point;
point alive[sizeX * sizeY - 1];
this функция работает нормально, если координата живой ячейки не находится на краю, например (0,0). В этом случае программа обычно выдает ошибку с ошибкой сегментации, поскольку она пытается поместить значение в несуществующую ячейку.
есть ли функция, которая может использоваться для проверки наличия ячейки в массив, который я могу использовать перед обновлением каждой окружающей ячейки, чтобы проверить, существует ли она?