int *ws = new int;
Dynamicznie alokujesz inta, `ws` wskazuje na niego...
ws=&ile;
Zapominasz o tym dynamicznie zaalokowanym incie, teraz wskazujesz na zmienną `ile`...
delete ws;
Po czym próbujesz zdealokować zmienną ze stosu, co nie ma sensu.
Ogólnie nie rozumiem, po co w ogóle w tym bloku
int *ws = new int;
ws=&ile;
*ws-=1;
for(*ws; *ws>=0; --*ws)
cout<<" "<<tab[*ws];
używasz wskaźnika `ws`. Nie widzę tutaj niczego co by wymagało wskaźników ani dynamicznej alokacji jednego inta.