Алгоритм в коде с++

Какая-то невидимая ошибка в программе.

#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 и иже с ним.

→ Ссылка