Вы записываете за пределы массива arr, это вызывает повреждение стека при его запуске после компиляции с конфигурацией отладки в VS2008, даже сообщает вам, с какими переменными вы облажались.
Проблема заключается в том, что вы пытаетесь записать в длину массива, а не в длину - 1. Вы не только пытаетесь писать вне границ, но и читаете это позже (Строка 122, 133 и 134)
Не получаю ошибок или предупреждений компилятора, а также отладочного утверждения, говорящего мне, что я пытаюсь уменьшить нерасщепляемый итератор где-нибудь, когда я запускаю программу. Ошибка, которую вы видите, может быть просто побочным эффектом от повреждения стека, но я просто догадываюсь.