Тема: Access violation у динамічній пам'яті
Привіт. Виконую завдання: Дано інформацію про готель (скільки чоловік і в якому номері
проживають), де i – номер корпусу, j – номер поверху, k – номер кімнати.
Визначити різницю між кількістю зайнятих та порожніх номерів у n-му
корпусі на z-му поверсі використовуючи динамічне виділення пам’яті. Для звертання до елементів
масивів застосувати адресну арифметику.
На вигляд ніби все гаразд, але при компіляції похибка (Unhandled exception at 0x00007FF68B812845 in labb5.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.).
#include <iostream>
using namespace std;
int main() {
int i = 0, j = 0, k = 0;
do {
cout << "\nHow much body of buildings?: ";
cin >> i;
} while (i < 0);
do {
cout << "\nHow much floors?: ";
cin >> j;
} while (j < 0);
do {
cout << "\nHow much rooms?: ";
cin >> k;
} while (k < 0);
int*** Hotel = new int** [i];
for (int b = 0; b < i; b++) {
Hotel[i] = new int* [j];
for (int f = 0; f < j; f++) {
Hotel[i][j] = new int[k];
}
}
for (int b = 0; b < i; b++) {
cout << "\nBody of the building " << b + 1 << " : ";
for (int f = 0; f < j; f++) {
cout << "\nFloor " << f + 1 << " : ";
for (int r = 0; r < k; r++) {
do {
cout << "\nRoom " << r + 1 << " : ";
cin >> *(*(*(Hotel + b) + f) + r);
} while (6 < (*(*(*(Hotel + b) + f) + r)) < 0);
}
}
}
short int n, z, e = 0, f = 0, d;
cout << "\nDifference between: \n";
do {
cout << "\nBody of the building: ";
cin >> n;
} while (n > i);
do {
cout << "\nFloor: ";
cin >> z;
} while (z > j);
for (int r = 0; r < k; r++) {
if (*(*(*(Hotel+n)+z)+r) >= 1) {
f++;
}
if (*(*(*(Hotel+n)+z)+r) == 0) {
e++;
}
}
d = f - e;
cout << "\nDifference between filled and empty rooms is: " << d << endl;
cout << "Full: " << f << endl;
cout << "Empty: " << e << endl;
for (int b = 0; b < i; b++)
{
for (int f = 0; f < j; f++)
{
for (int r = 0; r < k; r++)
{
delete[] Hotel[k];
}
delete[] Hotel[i][j];
}
delete[] Hotel[i];
}
delete[] Hotel;
system("pause");
return 0;
}