for(char* pnew_char = new_char; *pnew_char++ = *--pchar;); //работает
for(char* pnew_char = new_char; *pnew_char++ = *pchar--;); //не работает, *pnew_char == '\0'
вы не правильно видимо понимаете момент возникновения исключения
throw runtime_error();
У меня есть DLL, которая в одном из своих потоков может вызвать исключение- оно видимо само взяло и решило появится