Здравствуйте, piero_, Вы писали:
_>как освободить память, если у меня 4-мерный динамический массив, выделяю память я так:
_> int **** Grid11;
_> int Range1, Range2;
_> Grid11 = new int***[Range1];
_> for(i1 = 0; i1 < Range1; i1++)
_> {Grid11[i1] = new int**[Range1];
_> for(i2 = 0; i2 < Range1; i2++)
_> {Grid11[i1][i2] = new int*[Range2];
_> for(i3 = 0; i3 < Range2; i3++)
_> {Grid11[i1][i2][i3] = new int[Range2];
_> memset(Grid11[i1][i2][i3],0, sizeof(int)*(Range2));
_> }
_> }
_> }
_>Спасибо
Ответ Егора хочу дополнить подсказкой. Если в этом примере использовать класс std::vector из стандартной библиотеки, то забота об освобождении памти отпадает автоматически:
#include <iostream>
#include <vector>
int main()
{
using namespace std;
typedef vector<int> V1;
typedef vector<V1> V2;
typedef vector<V2> V3;
typedef vector<V3> V4;
int Range1 = 20, Range2 = 10;
//Создаем четырехмерный массив целых, заполненный нулями.
V4 Grid11(Range1, V3(Range1, V2(Range2, V1(Range1))));
//Создаем такой же четырехмерный массив, заполненный единицами.
V4 Grid22(Range1, V3(Range1, V2(Range2, V1(Range1, 1))));
//Работаем, как с обычными встроенными массивами
Grid11[1][2][3][4] = 1234;
Grid22[4][3][2][1] = 4321;
cout << Grid11[1][2][3][4] << endl;
cout << Grid22[4][3][2][1] << endl;
/*...*/
}
При выходе из функции
main память, выделенная для объектов Grid11 и Grid22, будет освобождена автоматически. Кроме того, твой код приобрет устойчивость по отношению к возможным исключениям — память освободится даже в этом случае. И, что очень важно, сравни эти два варианта кода, какой из них легче прочитать и проще понять?
... << RSDN@Home 1.2.0 alpha rev. 787>>