Почему вызывается исключение на функции 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 в функции.