U oba slučaja zaboravio si dealokaciju. Polje je ništa drugo već pokazivač:
int *p = new int[50];
// korištenje
p[0] = ....
.
.
p[49] = ...
// dealokacija
delete []p;
U ovom drugom slučaju nisi dobro napravio. Prvo trebaš dinamički alocirati polje pokazivača, a zatim svakom od njih alocirari redak:
int **p = new *int[10]; // alociranje 10 pokazivača na retke
for(i = 0; i < 10; i++)
p[i] = new int[10]; // svaki pokazivač pokazuje na svoj redak
// korištenje
p[0][0] = ...
.
.
p[9][9] = ...
// dealokacija redaka
for(i = 0; i < 10; i++)
delete[] p[i];
//dealokacija pokazivača
delete []p;
pišem napamet pa ako sam nešto fulao...