Страницы

Поиск по вопросам

четверг, 18 апреля 2019 г.

Вызвано исключение по адресу: нарушение прав доступа при чтении по адресу

void fillMassL(float **massL, int size) { for (size_t j = 0; j < size; j++) { for (size_t i = 0; i < size; i++) { if (i == j) massL[j][i] = 1; else massL[j][i] = 0; } } }
Компилятор показывает ошибку где-то тут, но вообще не могу понять что не так.
if (i == j) massL[j][i] = 1; else massL[j][i] = 0;
Cообщение компилятора: Вызвано исключение по адресу 0x00007FF6B49826F5 в LR1.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFFFFFFFFFFFFFFFF., произошло
Вызов функции:
fillMassL(ptr_massL, *ptr_size);
Создание ptr_massL:
int *ptr_size = new int; *ptr_size = 5; float **ptr_massL = new float*[*ptr_size];


Ответ

Maccив ptr_massL создан некорректно. Должны быть 2 этапа:
Выделяется память под сам массив указателей на float В цикле выделяется память под каждый его элемент.
float **ptr_massL = new float*[*ptr_size]; for(int i = 0; i < *ptr_size; ++i) ptr_massL[i] = new float[*ptr_size];
Вот тогда все будет ок.

Комментариев нет:

Отправить комментарий