Не стоит забывать об удалении (освобождении) динамически занятой памяти.
int n=выражение;
//int ar[n]; // ERROR!!!
int *pn=new int[n]; //выделившийся в памяти блок размером n*sizeof(int)+служебная информация
pn[i]=…;
int *tmp=new int[n*z];
for (int i=0; i<n; i++){tmp[i]=pn[i];}
memcpy(tmp,pn,n*sizeof(int));
delete[]pn;
pn=tmp;
pn[i]=…;
delete[]pn;
delete[]tmp;
pn= Ø;
tmp= Ø;
Многомерные массивы.
pf=new float[n][2]; //создали массив векторов
delete []pf;
int M=выражение;
int N=выражение;
int *p=new int[M*N];
p[i*M+j]=…;
Операция new в памяти более сложна, чем выделение, т.к. программист явно или неявно передаёт информацию о количестве элементов, а оператор delete получает только титрированный указатель.
Проблема состоит в определении: является ли данный указатель указателем на одиночный объект или на массив объектов. Для этих целей в C++ существует две формы delete:
Delete для одиночных объектов;