if (i != ile - 1) tablica++;
Modyfikujesz tutaj wskaźnik, który przechowuje adres zaalokowanej pamięci. Później próbujesz usunąć pamieć wskazywaną przez taki zmodyfikowany wskaźnik, a przecież jest to błędem. Operator delete musi otrzymywać adres wygenerowany przez operator new, żaden inny. Jeśli chcesz modyfikować adres, stwórz kopię wskaźnika i pracuj na niej.
cout << (int)tablica << endl;
Po co rzutujesz adres na int?