Como dice Eternal Idol, ese código tampoco debe funcionar con malloc.
Es simple, reservas memoria para 10 enteros, entonces
pa apunta al primero de ellos y puedes recorrerlos con
pa[indice], pero luego haces
pa++, con lo que, para cuando quieres liberar
pa ésta ya anda por otro lado y marca un error al intentar liberar los 10 elementos a partir de donde al final apunta
pa.
Si realmente quieres hacer algo así, usa dos punteros, así:
int* pa;
int* pb;
pb = new int[ 10 ];
pa = pb;
...
pa++
...
delete[] pb;
Saludos,
JJ (Geo).