34 #define Alloc2(M, N, x) \    35   double **x=new double*[M]; x[0]=new double[(M)*(N)]; for (int _z=1; _z<M; _z++) x[_z]=&x[0][_z*(N)];    36 #define Alloc2L(M, N, x, LIST) Alloc2(M, N, x); if (LIST) LIST->Add(x, 2);    38 #define Allocate2(INT, M, N, x) \    39   x=new INT*[M]; x[0]=new INT[(M)*(N)]; for (int _z=1; _z<M; _z++) x[_z]=&x[0][_z*(N)];    40   #define Allocate2L(INT, M, N, x, LIST) Allocate2(INT, M, N, x); if (LIST) LIST->Add(x, 2);    42 #define DeAlloc2(x) {if (x) {delete[] (char*)(x[0]); delete[] x; x=0;}}    45 #define Alloc3(L, M, N, x) \    46   double*** x=new double**[L]; x[0]=new double*[(L)*(M)]; x[0][0]=new double[(L)*(M)*(N)]; \    47   for (int _z=0; _z<L; _z++) {x[_z]=&x[0][_z*(M)]; x[_z][0]=&x[0][0][_z*(M)*(N)]; \    48     for (int __z=1; __z<M; __z++) x[_z][__z]=&x[_z][0][__z*(N)]; }    50 #define Allocate3(INT, L, M, N, x) \    51   x=new INT**[L]; x[0]=new INT*[(L)*(M)]; x[0][0]=new INT[(L)*(M)*(N)]; \    52   for (int _z=0; _z<L; _z++) {x[_z]=&x[0][_z*(M)]; x[_z][0]=&x[0][0][_z*(M)*(N)]; \    53     for (int __z=1; __z<M; __z++) x[_z][__z]=&x[_z][0][__z*(N)]; }    54   #define Allocate3L(INT, M, N, O, x, LIST) Allocate3(INT, M, N, O, x); if (LIST) LIST->Add(x, 3);    56 #define DeAlloc3(x) {if (x) {delete[] (char*)(x[0][0]); delete[] x[0]; delete[] x; x=0;}}    59 #define Alloc4(L, M, N, O, x) \    60   double**** x=new double***[L]; x[0]=new double**[(L)*(M)]; \    61   x[0][0]=new double*[(L)*(M)*(N)]; x[0][0][0]=new double[(L)*(M)*(N)*(O)]; \    62   for (int _z=0; _z<L; _z++){ \    63     x[_z]=&x[0][_z*(M)]; x[_z][0]=&x[0][0][_z*(M)*(N)]; x[_z][0][0]=&x[0][0][0][_z*(M)*(N)*(O)]; \    64     for (int __z=0; __z<M; __z++){ \    65       x[_z][__z]=&x[_z][0][__z*(N)]; x[_z][__z][0]=&x[_z][0][0][__z*(N)*(O)]; \    66       for (int ___z=1; ___z<N; ___z++) x[_z][__z][___z]=&d[_z][__z][0][___z*(O)]; }}    68 #define DeAlloc4(x) {if (x) {delete[] (char*)(x[0][0][0]); delete[] x[0][0]; delete[] x[0]; delete[] x; x=0;}}    89   MList(){
for (
int i=0; i<4; i++) cap[i]=64, count[i]=0, List[i]=(
void**)malloc(
sizeof(
void*)*cap[i]);}
    91     for (
int i=0; i<count[0]; i++){
delete[] (
char*)(List[0][i]); List[0][i]=0;} free(List[0]);
    92     for (
int i=0; i<count[1]; i++){
void** tmp=(
void**)List[1][i]; DeAlloc2(tmp); List[1][i]=0;} free(List[1]);
    93                 for (
int i=0; i<count[2]; i++){
void*** tmp=(
void***)List[2][i]; DeAlloc3(tmp); List[2][i]=0;} free(List[2]);
    94                 for (
int i=0; i<count[3]; i++){
void**** tmp=(
void****)List[3][i]; DeAlloc4(tmp); List[3][i]=0;} free(List[3]);}
    95   void __fastcall Add(
void* item, 
int Dim){
    96     int Gr=Dim-1; 
if (count[Gr]==cap[Gr]) IncCap(Gr); List[Gr][count[Gr]++]=item;}
    97   void IncCap(
int Gr){cap[Gr]+=64; List[Gr]=(
void**)realloc(List[Gr], 
sizeof(
void*)*cap[Gr]);}
 Definition: arrayalloc.h:83