Другие языки программирования и технологии

Не удаляется 3-мерный динамический массив... C++

Дмитрий ///v///
Дмитрий ///v///
6 574
Нет в приведённом коде ошибки.
Ты где-то подпортил содержимое массива в промежуточном коде. Между заполнением и удалением работал с массивом и вылетел за границу. А может даже и с соседней переменной. Или size не константа и успел измениться перед удалением.
Валерий Жабко
Валерий Жабко
2 114
Лучший ответ
Дмитрий ///v/// Вы абсолютно правы. Я нашёл ошибку, и она заключалась именно в выходе за границу...
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
size_t layers = 3, rows = 5, columns = 7;
size_t size_buffer = layers * rows * columns;
size_t total_rows = layers * rows;
int* buffer = new(nothrow) int[size_buffer];
if (buffer) {
int** matrix = new int*[total_rows];
int*** box = new int**[layers];
for (size_t row = 0; row != total_rows; ++row) matrix[row] = buffer + columns * row;
for (size_t layer = 0; layer != layers; ++layer) box[layer] = &matrix[layer * rows];
int value = 0;
for (size_t index = 0; index != size_buffer; ++index) buffer[index] = ++value;
for (size_t layer = 0; layer != layers; ++layer, cout << '\n')
for (size_t row = 0; row != rows; ++row, cout << '\n')
for (size_t column = 0; column != columns; ++column)
cout << setw(5) << box[layer][row][column];
delete[] buffer;
delete[] matrix;
delete[] box;
} else cout << "Could not allocate memory!\n";
cin.get();
}
Самый простой вариант воспользоваться "умением" С++11 создавать массив "переменного" размера

int size;
cin>>size;
int arr[size][size][size];
Петр Зигура
Петр Зигура
77 582
std::vector{std::vector{std::vector{int}}}}} arr_3d;
удаление:
delete arr_3d;

}{ = ><
Алексей Мин
Алексей Мин
24 328
Какая-то проблема