Я не помню, где и когда я прочитал (или услышал) следующее утверждение:
Если вы выделили память для массива или для одного элемента, лучше его всегда! удалять при помощи delete [], который сработает, даже если вы выделяли один элемент, например int *p=new int;delete []p;

Так вот, оказывается, это не так.

Выделил через new -- удаляй через delete.
Выделил через new[] -- удаляй через delete[].

Иначе поведение не определено.