Exception: EXC_BAD_ACCESS (code=1, address=0x3e6146af0)

имеется код:

#include <iomanip>
#include <stdlib.h>
#include <iostream> // for cin cout
#include <ctime>

using namespace std;

int f(int i, int j, int n) // функция для определения номера
{
    return (i * n + j); // массиве
}

// функция выделения памяти для двумерного массива
// возвращает указатель
int* get_memory1(int nrow, int ncol)
{
    int* array = new int[nrow * ncol];
    return array;
}

// функция выделения памяти для двумерного массива
// указатель передается по ссылке
void get_memory2(int *&array, int nrow, int ncol)
{
    array = new int[nrow * ncol];
}

// функция освобождения памяти
void free_memory (int *array, int nrow, int ncol)
{
    delete[] array ;
}

// функция заполнения матрицы, например так
void vvod (int *array,int nrow,int ncol)
{
    for (int i = 0; i < nrow; i++)
        for (int j = 0; j < ncol; j++)
            array[f(i, j, ncol)] = rand() % 20;

}

// функция вывода матрицы на экран
void vyvod (int *array, int nrow, int ncol)
{
    for (int i = 0; i < nrow; i++)
    {
        for (int j = 0; j < ncol; j++)
            cout << setw(5) << array[f(i, j, ncol)];
        cout << endl;
    }
}
//норма заданной матрицы
int norma(int** array, int nrow, int ncol)
{
    int sum=0;
    int max = 0;

    for (int i = 0; i < nrow; i++)
    {
        for (int j = 0; j < ncol; j++)
        {
            sum += array[j][i];
        }
        if (sum >= max)
        {
            max = sum;
        }
    }
    cout << "norma: " << sum << endl;
    return max;
}

int main()
{
    srand(time(NULL));
    int nrow = 0, ncol = 0;
    cin >> nrow >> ncol; // задаем размерности матрицы
    int *Array = get_memory1(nrow,ncol); // выделение памяти
    vvod (Array, nrow, ncol); // заполнение массива
    vyvod (Array, nrow, ncol); // вывод на экран
// норма заданной
    int Result = norma(&Array, nrow, ncol);
    cout << "Result=" << Result << endl;
    free_memory(Array, nrow, ncol); // освобождение памяти
    return 0;
}

во время использования отладчика выводит Exception: EXC_BAD_ACCESS (code=1, address=0x3e6146af0) Подскажите как исправить)


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

Автор решения: Mikhailo
int norma(int** array, int nrow, int ncol)
...
sum += array[j][i];

Здесь у вас array[j][i] совсем не двумерный массив (откуда компилятору знать его размерности?), а одномерный массив указателей на одномерные массивы.

Вы же врожде бы правильно работали с массивом выше -

array[f(i, j, ncol)] = rand() % 20;

так почему вдруг перестали?

→ Ссылка