На самом деле невозможно точно знать, почему это произошло так, как это произошло.Вот почему спецификации C ++ называют это «неопределенным поведением»: это то, что находится за пределами определения языка.Возможно, он выполнялся правильно в некоторых реализациях компиляторов / стандартной библиотеки.Возможно, здесь произошел сбой из-за повреждения памяти, вызванного удалением [] указателя, не являющегося массивом.
Вы можете получить жесткий отладчик памяти (re: valgrind), чтобы выяснить точный момент, когда кучаповрежден.Вы можете даже понять, почему объект iostream был поврежден этим.Но это никому не поможет, потому что в другой системе может произойти сбой по совершенно другим причинам.В самом деле, простое введение только отладчика памяти может изменить поведение того, где или когда он выходит из строя.