Codeblocks при запуске выдает ошибку "прекращена работа программы"

Нужно создать класс двумерного массива(квадратного), в который встроена возможность чтения из файла с изменяемыми названиями входного и выходного файлов.
Читаю и вывожу одну и ту же матрицу.

Собирается без ошибок, а при нажатии run вылезает «Завершена работа программы».
Проблема в codeblocks или в коде? Как починить?

Входные данные(в первой строке размерность, дальше элементы):
4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

main.cpp:

#include <iostream>
#include <cstring>
#include "matrixes.h"

using namespace std;

int main()
{
    matrixes unit1;
    const char *input;
    const char *output;
    input="input.txt";
    output="output.txt";
    matrixes::readmatrix(&unit1,input);
    matrixes::writematrix(&unit1,output);
    return 0;
}

matrixes.h:

#ifndef MATRIXES_H
#define MATRIXES_H

class matrixes
{
    public:
        matrixes();
        matrixes(const matrixes& other);
        matrixes& operator=(const matrixes& other);
        static void readmatrix(matrixes *mat, const char *filenam);
        static void writematrix(matrixes *mat, const char *filenam);
        int size_;
        int matrix[512][512];
};

#endif // MATRIXES_H

matrixes.cpp:

#include <iostream>
#include "matrixes.h"
#include <cstring>
#include <stdio.h>

using namespace std;


matrixes::matrixes()
{
    size_=512;
    for (int i=0;i<size_;i++){
        for(int j=0;j<size_;j++){
            matrix[i][j]=0;
        }
    }
}

matrixes& matrixes::operator=(const matrixes& other){
    this->size_=other.size_;
    for (int i=0;i<this->size_;i++){
        for(int j=0;j<this->size_;j++){
            this->matrix[i][j]=other.matrix[i][j];
        }
    }
    return *this;
}

void matrixes::readmatrix(matrixes *mat, const char *filenam)
{
    freopen(filenam,"r",stdin);
    int tmp,tmp2;
    scanf("%d",&tmp);
    mat->size_=tmp;
    for (int i=0;i<tmp;i++){
        for(int j=0;j<tmp;j++){
            cin >> tmp2;
            mat->matrix[i][j]=tmp2;
        }
    }
}

void matrixes::writematrix(matrixes *mat, const char *filenam)
{
    freopen(filenam,"w",stdout);
    int tmp = mat->size_;
    for (int i=0;i<tmp;i++){
        for(int j=0;j<tmp;j++){
            cout << mat->matrix[i][j] <<' ';
        }
        cout << endl;
    }
}

И чо, прям таки «собирается без ошибок»? Ничего, что нет реализации для конструктора копирования?

512 х 512 х 4 = 1Мб — это размер переменной unit1, которую ты размещаешь в стеке. Многовато будет для стека. Поэтому и крашится.

И чо, прям таки «собирается без ошибок»?

Да.

Ничего, что нет реализации для конструктора копирования?

Он здесь не используется, так что она не нужна.

Многовато будет для стека.

Зависит от параметров сборки и ОС.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.