Почему вызывается исключение на функции min_elem

class Matrix
{
    int n;
    int m;
    int** matr;
public:
    Matrix();
    Matrix(int, int);
    
    int min_elem();
    int max_elem();
};
int main()
{
    srand(time(nullptr));
    Matrix();
    Matrix m1(10, 4);
    m1.min_elem();
    cout << m1.min_elem();
    
}
Matrix::Matrix()
{

}
Matrix::Matrix(int n, int m)
{
    int** matr = new int* [n];
    for (int i = 0; i < n; i++)
    {
        matr[i] = new int[m];
        for (int j = 0; j < m; j++)
        {
            matr[i][j] = rand() % 10;
            cout << " " << matr[i][j];
        }
        cout << endl;
    }

    this->n = n;
    this->m = m;
}
int Matrix::min_elem()
{
    int max = matr[0][0];  //здесь вызывается исключение
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            if (matr[i][j] > max)
                max = matr[i][j];
        }
        cout << endl;
    }
    
    return max;
}

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

Автор решения: Harry

Давайте рассмотрим ваш

Matrix::Matrix(int n, int m)
{
    int** matr = new int* [n];
    for (int i = 0; i < n; i++)
    {
        matr[i] = new int[m];
        for (int j = 0; j < m; j++)
        {
            matr[i][j] = rand() % 10;
            cout << " " << matr[i][j];
        }
        cout << endl;
    }

    this->n = n;
    this->m = m;
}

Вы старательно выделили память - но не для члена matr, а для локальной переменной. А в min_elem() обратились к неинициализированному члену класса matr...

Или допишите в конце конструктора строчку

this->matr = matr;

или уберите int** перед matr в функции.

→ Ссылка