Ошибка -1073741571 в коде C++

При запуске без отладки в консоли пустота и надпись

(процесс 12512) завершил работу с кодом -1073741571 (0xc00000fd).

Отладчик говорит

Необработанное исключение по адресу 0x00007FF63CC2C567 в распад.exe: 0xC00000FD: Stack overflow (параметры: 0x0000000000000001, 0x000000355E213000).

и указывает на строку
int main() {

Мой код: (он ещё не дописан и может выглядеть плохо, извиняюсь)

#include <iostream>
#include <windows.h>
#include <thread>
#include <chrono> 
#include <fstream>
#include <cmath>
#include <random>
#include <iomanip>

using namespace std;
//20100000000000000000 лет 1 год = 3.15569259747e7 с
//8.6e-23 c

int decay() {
    return 0;
}

int main() {
    setlocale(LC_ALL, "Ru");
    srand(time(NULL));
    int a{0};
    double qtt[118][178];char types[118][178][11];double prbt[118][178][10];double period[118][178];
    cout << "Программа анализа ядерных реакций фёдора 0.1!" << endl;
    cout << "Выберите режим работы (1 -- запись) "; cin >> a;
    
    for (int i = 0; i < 118;i++) {
        for (int j = 0; j < 178;j++) {
            qtt[i][j] = 0;
            types[i][j][0] = 0;
            period[i][j] = 8.6e-23;
        }
    }

    ofstream file_in("Data.txt", ios_base::out);
    if (a == 0) {
        for (int i = 0; i < 2;i++) {
            for (int j = 0; j < 8;j++) {
                int qttv;
                cout << "количество вариантов ";cin >> qttv;
                types[i][j][0] = qttv;
                for (int k = 0; k < qttv; k++) {
                    cout << i + 1 << " " << j + i + 1 << " " << "stable s / alpha a / beta- b / beta+ c / neutron n / proton p / b- n d / b- a e / b- b- f / b+ b+ g" << endl;
                    cin >> types[i][j][k + 1];
                    cout << "вероятность ";cin >> prbt[i][j][k];
                }
                cout << "период ";cin >> period[i][j];
            }
        }
    }
    
    for (int i = 0; i < 118;i++) {
        for (int j = 0; j < 177;j++) {
            file_in << qtt[i][j] << endl;
            file_in << period[i][j];
            for (int k = 0; k < types[i][j][0]; k++) {
                file_in << types[i][j][k+1] << endl;
                file_in << prbt[i][j][k] << endl;
            }
        }
    }
    file_in.close();

    //ifstream file_out("Data.dat");
    //file_out.close();
} 

Ответы (1 шт):

Автор решения: Harry
double qtt[118][178];
char types[118][178][11];
double prbt[118][178][10];
double period[118][178]; 

занимает примерно 2.2 МБ памяти. Какой у вашего компилятора размер стека по умолчанию?.. В Visual C++ - всего 1 мегабайт. Так что, сами понимаете - Stack Overflow.

Можно

  1. сделать массивы глобальными
  2. использовать соответствующие ключи компиляции для увеличения стека
  3. использовать динамическое выделение памяти
→ Ссылка