私は Visual Studio 2013 で MSVC を使用しています。これは私がコンパイルしているコードです:
#include <iostream>
using namespace std;
void crash()
{
cout << "crash?" << endl;
system("PAUSE");
}
int main(int argc, char *argv[])
{
atexit(crash);
//while(true);
return 0;
}
現在のやり方 - それは魅力のように機能します。プログラムを開始すると、クラッシュ関数に入り、一時停止し、キーを押すと、通常どおり終了します。すべてクール。ただし、while ループのコメントを外し、コンソールの [X] ボタンを使用して閉じると、endl 関数内でクラッシュが発生します。クラッシュの原因が _Ostr.widen() であることがわかりました。これは、MSVC が提供する endl 関数の実装です。
template<class _Elem,
class _Traits> inline
basic_ostream<_Elem, _Traits>&
__CLRCALL_OR_CDECL endl(basic_ostream<_Elem, _Traits>& _Ostr)
{ // insert newline and flush stream
_Ostr.put(_Ostr.widen('\n'));
_Ostr.flush();
return (_Ostr);
}
Ctrl+C を使用してプログラムを終了しても、同じ結果になります。どうすればこれを修正できますか?