Ошибка при работе с массивом. First_project.exe вызвал срабатывание точки останова

Программа заключается в том, что подается двумерный массив. Нужно отсортировать по возрастанию только четные числа по строке. В коде сейчас работаю только с первой строкой, но возникает ошибка, не могу устранить.

#include<iostream>
#include <ctime> // содержит time()
using namespace std;

bool proverka(double size)// проверка размеров на целое и положительное число
{
    bool prover = false;
    if ((size - int(size)) != 0)
    {
        prover = false;
    }
    else
    {
        int n = (int)size;
        if (n > 0)
        {
            prover = true;
        }

        else
        {
            prover = false;
        }
    }
    return prover;
}

int main()
{
    int i, j;//счетчики: i-номер строки, j-номер столбца
    double n, m;//переменные для проверки n-количество столбцов, m-количество строк
    int N, M; // N-количество столбцов, M-количество строк
    int** matrix;//исходный массив
    cout << "Enter the size of the matrix" << endl;
    cout << "Enter the number of columns:";
    cin >> n;
    bool proverka1;
    proverka1 = proverka(n);
    while (proverka1 == false)//просим от пользователя ввести натуральное число
    {
        cout << "Enter the number of columns:";
        cin >> n;
        proverka1 = proverka(n);
    }
    cout << "Enter the number of lines:";
    cin >> m;
    proverka1 = proverka(m);
    while (proverka1 == false)//просим от пользователя ввести натуральное число
    {
        cout << "Enter the number of lines:";
        cin >> m;
        proverka1 = proverka(m);
    }
    N = (int)n;
    M = (int)m;
    matrix = new int* [M];
    for (i = 0; i < M; i++)
        matrix[i] = new int[N];
    srand(time(NULL));
    for (i = 0; i < M; i++)
    {// ввод матрицы
        for (int j = 0; j < N; j++)
        {

            matrix[i][j] = rand()%10+0;
        }
    }
    for (i = 0; i < M; i++)
    {// вывод матрицы
        for (int j = 0; j < N; j++)
        {
            cout.width(5);
            cout<<matrix[i][j];
        }
        cout << endl;
    }
    cout << "\n\n\n\n\n\n";
        int shet = 0;
        for (j = 0; j < N; j++)
        {
            if (matrix[0][j] % 2 == 0)
            {
                shet++;
            }
        }
        int* mass = new int(shet);//массив значений
        int* mass1 = new int(shet);//массив индексов этих значений 
        int l=0;//счетчик для дополнительных массивов
        for (j = 0; j < N; j++)
        {
            if (matrix[0][j] % 2 == 0)
            {
                mass[l] = matrix[0][j];
                mass1[l] = j;
                l++;
            }
        }
        for ( i = 0; i < shet - 1; i++) {
            for ( j = 0; j < shet - i - 1; j++) {
                if (mass[j] > mass[j + 1])
                {// сортировка пузырьком
                    int temp = mass[j];
                    mass[j] = mass[j + 1];
                    mass[j + 1] = temp;
                }
            }
        }
        for (i = 0; i < shet; i++)
        {//обратная вставка
            matrix[0][mass1[i]] == mass[i];
        }
        return 0;
}

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

Автор решения: Павел Ериков

Для начала на строчках:

int* mass = new int(shet);
int* mass1 = new int(shet);

Вы не создаете массив, а создаете указатель, который указывает на участок памяти, где хранится целое число shet.

Для создание массива нужно вместо круглых скобок () писать квадратные []

Так же на строчке:

matrix[0][mass1[i]] == mass[i];

== это оператор сравнения, а вот = оператор присваивания.

И не забывайте освобождать память после работы с динамическими данными, чтобы не произошла утечка этих данных.

Например удаление матрицы:

for (i = 0; i < M; i++) {
    delete[] matrix[i];
}
delete[] matrix;

Для массивов mass и mass1 аналогично, как delete[] matrix;

→ Ссылка