Как решить эту ошибку?
Перепишите этот ужас с нуля. Там невозможно найти ошибку.

Советую воспользоваться тем, что условные операторы вычисляются лениво: Если написать A && B и A окажется false, то B даже не будет вычисляться.

Так, проверка на клетку сверху может быть написана так:
if (i > 0 && a[i-1][j] - мина)

Так вся ваша простыня выродится в 8 последовательных проверок. Если меняются обе координаты, то надо через && объединить 3 условия - 2 на проверку невыхода за границы массива, и последнее - проверка значения массива.

Еще можно завести массив на SIZE+2 x SIZE+2 и заполнять его с (1, 1). Фактически, создается каемка вокруг исходного массива. И пробегаться по нему надо от 1 до SIZE. Так, вокруг всегда будут все 8 соседей. В этом подходе не придется проверять на выход за границы массива.

А еще можно вместо 8 if-ов сделать цикл на 8 итераций, если завести константы для приращений:
const int kDx[] = {1, 1, 1, 0, -1, -1, -1, 0};
const int kDy[] = {1, 0, -1, -1, -1, 0, 1, 1}; 

Теперь всех соседей можно перебрать как (i + kDx[k], j + kDy[k])
Проверки на границы массивов кто будет делать?
Допустим, a = SIZE - 1. В первом if-блоке эта строчка какое поле проверяет:
if (field[a + 1][b - 1] == char(206))
?

Но вообще, т.к. тут идет только чтение, падение программы маловероятно. Вы где-то еще и пишите за границы массива, видимо.