Всё нормально. В дебаггере если повезёт, то не вылетит. В релизе - 100%.
А вылетает потому, что пытается удалиться кусок памяти, выходящий за пределы выделенного блока.
Те выделяем блок начиная с адреса р размером 10*sizeof(int), потом смещаем начало этого блока на один - р++, потом удаляем 10! элементов - десятый не наш. Ошибка доступа к памяти.
Если дебаггер выделит больше памяти ЗА нашим блоком, то всё будет в порядке - ошибка останется незамеченной. Как избежать такой ошибки? Очень просто - использовать ещё один указатель:
int* p = new int[10];
int* p1 = p;
// делаем все дальнейшие операции только с р1
p1++;
// а удаляем с начала нашего блока
delete p;