Как решить проблему с вводом двумерного массива?
//переопределяю массив новыми размерами
    a[row][col];С чего вы сделали такой вывод? Это просто получение значения из массива a по индексам row и col.
Соответственно, массив у вас остаётся размером 1x1 и при записи в несуществующие адреса повреждается стек.
Как решить проблему?Изучить, как создавать массив динамически.
a[row][col]; Это не переопределение массива, а доступ к элементу с индексами row  и col.
Для создания динамичесго массива используйте указатели или std::vector.