Передача массива в функции

Рейтинг: 0Ответов: 1Опубликовано: 27.04.2023

В моем коде есть две функции: Создание двумерного массива

void at1(char* name, int rows, int cols)
{

    ofstream f1;
    f1.open(name);

    //создание динамической матрицы
    int i, j;
    double** mas = new double* [rows];
    if (mas == NULL)
    {
        cout << "\nНе хватило ОП";
        exit(1);
    }
    for (i = 0; i < rows; i++)
    {
        mas[i] = new double[cols];
        if (mas[i] == NULL)
        {
            cout << "\nне хватило ОП";
            exit(1);
        }
    }

    //ввод данных матрицы и запись их в файл
    cout << "\n\nВведите данные матрицы: \n";
    for (i = 0; i < rows; i++)
    {
        for (j = 0; j < cols; j++)
        {
            cin >> mas[i][j];
            f1 << mas[i][j] << "  ";
        }
        f1 << endl;

    }
    f1.close();
}

И функция, в которой хочу сделать упорядочение элементов строк матрицы по возрастанию

void at3(char* name, int rows, int cols)
{
    double mas2 = ** mas;
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            cout << setw(5) << mas[i][j];
        }
        cout << endl;
    }
}

Пока что сделал вывод чисто для теста. Ошибка возникла в том, как из первой функции передать массив во вторую функцию? Можно ли как-то обойтись без создания этого массива в главной функции?

Ответы

▲ 1

По хорошему у Вас то и в первой функции ошибка. А именно: есть double** mas = new double* [rows]; а где его delete? Аналогично и с new в массиве!

По этому возвращать результатом функции значение mas, как предлагает в своём комментарии avp, это хорошо... но всё же добавьте функцию которая будет освобождать память сначала в цикле элементов массива, а потом и сам массив.

Да и по последним трендам разработки С++ лучше не пользоваться чистыми указателями при разработке, часто густо ошибки именно тут и закапываются. Используйте stl-ные всякие указатели. По началу будет немного не понятно, но когда немного привыкнете, то уже автоматически не будет таких, как выше описано, ошибок.