почему при просмотре координат типа map[y+2][x] не происходит ошибки с памятью, ведь этих координат может не существовать (у меня segmentation fault на c++)
@nikitam.829410 ай бұрын
c, да и плюсы не проверяют индекс для массива. Они просто отсчитали (y+2)*sizeof(char)) байт и обратились по этому адресу. А там скорее всего доступная память и никому не мешает (пока) У тебя выдаёт ошибку, потому что дальше память оказалась недоступной, а в видел доступной Вообще по названию массива мы просто получаем ссылку на ячейку в памяти первого элемента, а дальше по числам в квадратных скобках мы понимаем какой именно отрезок памяти нужно прочитать, но в си и плюсах нету автоматической проверки что мы вышли за приделы массива. Обычно на интеловской архитектуре почти всегда можно легко выйти за пределы массива, а на других скорее всего выдаст ошибку из-за того что мы попытаемся обратиться к зарезервированному кусочку памяти
@nikitam.829410 ай бұрын
я решил это такой проверкой: if (!(x + 2 > cols || x < 2 || y + 2 > rows || y < 2)) она ставится перед ифом в котором мы проверяем пустое ли место по координатам x-2, x+2 и тд. Этим я проверяю не выйду ли за приделы массива, если попробую сделать map[y+2][x]