Вылезает ошибка, пишу на С++
Вылазит ошибка: Необработанное исключение по адресу 0x003CDA99 в 10.4.exe: 0xC00000FD: Stack overflow (параметры: 0x00000000, 0x001C2000). Не понимаю как ее решить вот код:
#include <fstream>
#include <iostream>
#include <cmath>
using namespace std;
const int N = 2000, M = 2000;
const char* NOTFILE_IN = "Файл IN не найден.";
const char* NOTFILE_OUT = "Файл OUT не найден.";
typedef int matrix[N][M];
int main()
{
setlocale(LC_ALL, "RUSSIAN");
ifstream in("input.txt");
ofstream out("output.txt");
int n, m, r;
in >> n >> m >> r;
int matrix[N][M];
out << n << ' ' << m << ' ' << r << endl;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
in >> matrix[i][j];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
out << matrix[i][j] << "\t";
}
out << endl;
}
in.close();
out.close();
return 0;
}
Ответы (2 шт):
По умолчанию максимальный размер стека для Win32 = 1Мб, вы же пытаетесь выделить память в ~16mb (2000*2000*4)
int matrix[N][M];
Проблема в том, что вы пытаетесь выделить память на стеке больше, чем размер самого стека.
По умолчанию размер стека 1 МБ. Для изменения размера стека, если вы используете Visual Studio, используйте #pragma comment(linker, "/STACK:размер_стека_в_байтах").
Но лучше просто выделите память под массив из кучи:
int** matrix = new int*[N];
for(int i = 0; i<N; i++)
matrix[i] = new int[M];
После завершения работы с матрицей не забудьте освободить выделенную под неё память:
for(int i = 0; i<N; i++)
delete[] matrix[i];
delete[] matrix;