Top.Mail.Ru
Ответы
Аватар пользователя
2 месяца назад
от

Необработанное исключение в С++

писала код по видео уроку и вышло это: Необработанное исключение по адресу 0x00007FF64EEC257B в 15 practice metodichka.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x00000000FDFDFDFD.

#include <iostream>
using namespace std;
void main()
{
setlocale(LC_ALL, "RUS");
//двумерный динамический массив
int rows = 4;
int cols = 5;
int** arr = new int* [rows];//** значит, что переменная arr будет хранить указатель на указатель

for (int i = 0; i < rows; i++)
{
arr[i] = new int[cols];

}

for (int i = 0; i < rows; i++) //заполнение массива
{
for (int j = 0; i < cols; i++)
{
arr[i][j] = rand() % 10;
;
}
}

for (int i = 0; i < rows; i++) //е массива
{
for (int j = 0; i < cols; i++)
{
cout << arr[i][j] << '\t';
}
cout << endl;
}

for (int i = 0; i < rows; i++) //цикл для удаления того, что находится внутри массива. если удалить сам массив, то то, что есть в нем, останетс и произойдет утечка памяти
{
delete [] arr[i];
}
delete[] arr;

}

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Новичок
2мес

Во вложенных циклах у тебя в обоих стоит i++. Во втором цикле нужно написать j++

Аватар пользователя
Высший разум
2мес
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
 #include <cstdlib> 
#include <ctime> 
#include <iostream>

#define RAND(min, max) (rand() % ((max) - (min)) + (min)) 

using namespace std; 

int main() { 
    srand(static_cast<unsigned>(time(nullptr))); 
    size_t rows = 4; 
    size_t cols = 5; 
    auto arr = new(nothrow) int* [rows]; 
    if (arr != nullptr) { 
        for (size_t i = 0; i < rows; ++i) { 
            arr[i] = new(nothrow) int[cols]; 
            if (arr[i] == nullptr) { 
                for (size_t j = 0; j < i; ++j) { 
                    delete[] arr[j]; 
                } 
                delete[] arr; 
                arr = nullptr;
                break;
            } 
        } 
    } 
    if (arr != nullptr) { 
        for (size_t i = 0; i < rows; ++i) { 
            for (size_t j = 0; j < cols; ++j) { 
                arr[i][j] = RAND(0, 10); 
            } 
        } 
        for (size_t i = 0; i < rows; ++i) { 
            for (size_t j = 0; j < cols; ++j) { 
                cout << arr[i][j] << '\t'; 
            } 
            cout.put('\n'); 
        } 
        for (size_t i = 0; i < rows; ++i) { 
            delete[] arr[i]; 
        } 
        delete[] arr; 
    } else { 
        system("chcp 1251 > nul"); 
        puts("Недостаточно памяти!"); 
    }
    cin.get(); 
} 
Аватар пользователя
Знаток
2мес

во всех твоих циклах для "j" стоит переменная "i" - исправь и крашить не будет. ты просто выходишь за границы массива

Аватар пользователя
Ученик
2мес

я вас люблю