Использование фактического контейнера
Использование фактического контейнера позволяет избежать многих типов проблем, с которыми вы столкнулись.
Вместо
int**
Для двумерного массива (матрицы) более подходящей структурой данных может быть
std::array< std::array<int, cols>, rows>
, если размеры известны во время компиляции.
Если нет, вероятно, этоЛучше всего просто использовать один вектор ala.
auto my_array2d = std::vector<int>(rows*cols);//array now has 'rows*cols' elements of '0'
и выполнять индексацию самостоятельно.
Лучше всего, конечно, использовать библиотеку, например, eigen или 1024 * подталкивание *