int i, j, n, m;
char d;//для меню
float** matrix;//объявляем двойной указатель на матрицу
kt:
// cout << "1- manual input ";
cout << "1- ручной ввод ";
cout << endl;
cout << "2- ввод из файла ";
cout << endl;
cout << "3- выход ";
cout << endl;
cout << "введите: ";
cin >> d;
cout << endl;
if (d > '3' || d < '1')
{
cout << "правильно выберите пункт меню и введите число ";
cout << endl;
goto kt;
}
if (d == '3') { return 0; }
if (d == '2') { ... }
if (d == '1') {//ручной ввод данных в матрицу
cout << "Количество уравнений: ";
cin >> n;//
cout << "Количество переменных: ";
cin >> m;//
m += 1;
//создаем массив
float** matrix = new float* [n];
for (i = 0; i < n; i++) { matrix[i] = new float[m]; }
//инициализируем
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
cout << " Элемент " << "[" << i + 1 << " , " << j + 1 << "]: ";
cin >> matrix[i][j];
}
}
}
//выводим массив
cout << "расширенная матрица" << endl;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
cout << matrix[i][j] << " "; // Здесь возникает ошибка из вопроса
cout << endl;
}
cout << endl;
标记错误发生位置的注释(在代码底部)。如何修复它,为什么它未初始化?
那么,变量的范围和双重声明存在问题。
在您声明的函数的开头
float** matrix;- 一切都很好,一切都是合乎逻辑的。然后,在处理选择时,您声明另一个局部变量,分配内存,初始化它。
然后它超出了由 operator 限制的范围,
if并且这个局部变量被破坏了。分配的内存正在泄漏。然后,当您开始输出数组时,您访问存储在
float** matrix函数开头声明的变量中的地址。它指向任何地方,没有分配内存 - 你得到一个错误。它被简单地对待 -
if删除运营商中的公告。像这样:是的,编译器正确地警告你这个变量没有被初始化。
问题不清楚。这就是一切正常工作的方式。