char *tab; int ile=1;
tab=new char [ile];
Alokujesz tablice o wielkości 1. Zawsze. W końcu ile w chwili alokacji ma wartość 1. Zawsze. Więc w pętli wychodzisz poza tablice (o ile to nie jest liczba jednocyfrowa).
while((int)(tab-i)>=(int)(tab-ile+1))
{
cout<<(int)*(tab-i)<<" ";
i++;
}
Tutaj nawet nie chce dochodzić, co to miało robić, ale problem z jednoelementową tablicą pozostaje.
delete [] tab;
W pierwszej pętli przesunąłeś wskaźnik tab, więc twój kod ma undefined behaviour. delete[] musi dostać to samo, co zwróciło new[]. Temat powtarzany na forum niemal codziennie.