Только что попробовал clang с адресным дезинфицирующим средством для вашего кода
$ clang++-9 -fsanitize=address c.cc -o test && ./test
=================================================================
==14763==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7ffd7c8ff160 at pc 0x0000004c53ea bp 0x7ffd7c8fe860 sp 0x7ffd7c8fe858
WRITE of size 1 at 0x7ffd7c8ff160 thread T0
Это означает, что вы касаетесь памяти за пределами границ массива. Действительно в строке
if ((s[i][j] == '0' && s[i][j+1] == '0' && s[i][j + 2] == '1') || (s[i][j] == '1' && s[i][j + 1] == '0' && s[i][j + 2] == '0'))
Индекс j + 2
может быть больше, чем x - 1
.