#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];
Комментариев нет:
Отправить комментарий