У вас в массиве new_arr после выделения памяти находится мусор, а вы обращаетесь к функции strlen(new_arr) для вычисления длины строки с мусором в памяти. Эта функция работает некорректно, выдает значение не соответствующее действительности. Затем вы заполняете память, которую не выделяли (в new_arr[i]). При попытке ее удалить через delete[] у вас появляется heap corrupt.
PS. используя с++, используйте std::string