После того, как в динамической переменной отпала надобность, её можно удалить, освоботив используемую ею память для других целей. Например, созданные переменные уничтожаются следующими командами
delete i; delete j; delete[] p;
Создание многомерных динамических массивов с переменным количеством элементов
double **a=new double *[n];
for(int i=0; i<n;i++) a[i]=new double[m];
a[1][1]=1.0;
for(int i=0; i<n;i++) delete[] a[i]; delete[] a;