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;
так почему вдруг перестали?