Если вы выделили память для массива или для одного элемента, лучше его всегда! удалять при помощи delete [], который сработает, даже если вы выделяли один элемент, например int *p=new int;delete []p;
Так вот, оказывается, это не так.
Выделил через new -- удаляй через delete.
Выделил через new[] -- удаляй через delete[].
Иначе поведение не определено.