Страницы

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

воскресенье, 9 февраля 2020 г.

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

#cpp #c


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];

    


Ответы

Ответ 1



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]; Вот тогда все будет ок.

Ответ 2



Если это float **ptr_massL = new float*[*ptr_size]; и все создание массива, то вы глубоко неправы :) - нужно же еще выделить память для "второго измерения": for(size_t i = 0; i < *ptr_size; ++i) ptr_massL[i] = new floaf[*ptr_size];

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

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