Здравствуйте, rg45, Вы писали:
R>Ответ Егора хочу дополнить подсказкой. Если в этом примере использовать класс std::vector из стандартной библиотеки, то забота об освобождении памти отпадает автоматически:
R>R>#include <iostream>
R>#include <vector>
R>int main()
R>{
R> using namespace std;
R> typedef vector<int> V1;
R> typedef vector<V1> V2;
R> typedef vector<V2> V3;
R> typedef vector<V3> V4;
R> int Range1 = 20, Range2 = 10;
R> //Создаем четырехмерный массив целых, заполненный нулями.
R> V4 Grid11(Range1, V3(Range1, V2(Range2, V1(Range1))));
R> //Создаем такой же четырехмерный массив, заполненный единицами.
R> V4 Grid22(Range1, V3(Range1, V2(Range2, V1(Range1, 1))));
R> //Работаем, как с обычными встроенными массивами
R> Grid11[1][2][3][4] = 1234;
R> Grid22[4][3][2][1] = 4321;
R> cout << Grid11[1][2][3][4] << endl;
R> cout << Grid22[4][3][2][1] << endl;
R> /*...*/
R>}
R>
R>При выходе из функции main память, выделенная для объектов Grid11 и Grid22, будет освобождена автоматически. Кроме того, твой код приобрет устойчивость по отношению к возможным исключениям — память освободится даже в этом случае. И, что очень важно, сравни эти два варианта кода, какой из них легче прочитать и проще понять?
Я сделал как вы сказали, но не могу обратиться к элементу Grid11[0][0][0][0]
дебагер говорит "2382 Side effects are not allowed"
??? в чем может быть ошибка?