Алгоритм в коде с++
Какая-то невидимая ошибка в программе.
#include <iostream>
using namespace std;
int max_num = 109;
int main()
{
int n, m;
cin >> n >> m;
int** mas = new int* [n];
for (int i = 0; i < n; ++i)
{
mas[i] = new int[m + 1];
}
int* mas_shift = new int[n];
int* mas1 = new int[n * m];
int var;
for (int i = 0; i < n; i++)
{
var = 1;
for (int j = 0; j < m; j++)
{
if (var < max_num)
{
var += rand() % 2;
var += rand() % 2 * 2;
while (var > max_num)
var--;
}
mas[i][j] = var;
cout << var << " ";
}
mas[i][m] = max_num + 1;
cout << endl;
cout << "a" << i << " ";
}
cout << endl;
/// Отсюда перестает работать.
cout << "ab1 ";
int min_var= 0;
int min_str = 0;
for (int i = 0; i < n * m; i++)
{
min_var = max_num + 1;
for (int j = 0; j < n; j++)
{
if (min_var > mas[mas_shift[j]][j])
{
min_var = mas[mas_shift[j]][j];
min_str = j;
}
}
mas1[i] = min_var;
mas_shift[min_str] += 1;
}
cout << "ab2 ";
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout << mas1[i * j] << " ";
}
cout << endl;
}
cout << "ab3";
for (int i = 0; i < n; ++i)
{
delete[] mas[i];
}
delete[] mas;
delete[] mas1;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Ладно, вот первая ошибка (есть и еще, поищите).
Добавим проверку, что ваши индексы не выходят за пределы массива
for (int j = 0; j < n; j++)
{
assert(mas_shift[j] < n);
assert(j <= m);
if (min_var > mas[mas_shift[j]][j])
Мгновенный вылет, что первое условие нарушено. Т.е. mas_shift[j] явно больше или равно n. Почему?
Ответ: неинициализированный массив. Вы выделили память, но никаких значений в нее не внесли. там лежит какой-то мусор, так что ожидать корректной работы вашей программы не приходится никак...
P.S. Потратьте время на обучение работе с отладчиком. Или по крайней мере отладочному выводу, assert и иже с ним.