したがって、Visual Studio 2010 で記述およびコンパイルされた、次のようなコードがいくつかあります。
if ( outputFile.is_open() )
{
outputFile.close();
}
if ( !outputFile.is_open() ) // condition for sanity-checking
{
outputFile.open("errorOut.txt", ios::out);
}
これは、アクセス違反でクラッシュします。デバッガーをアタッチすると、最初の条件が false (outputFile
開いていない)、2 番目の条件が true (outputFile
閉じている、チェックしたばかりなので問題ありません) であることがわかります。その後open()
、呼び出され、最終的にlocale::getloc()
null ポインターを逆参照しようとしますが、なぜそれが起こるのかわかりません (標準ライブラリの奥深くに 3 つのクラスがあるため)。
興味深いことに、呼び出しがクラッシュしても、ファイル "errorOut.txt"は作成されます。open
デバッガーでこれを数時間監視しましたが、正直なところ、何が起こっているのかわかりません。コードの何が問題なのかを判断しようとするアイデアはありますか? 他の場所のコードがこの状況 (継承されたコード) に寄与している可能性は十分にありますが、それはたくさんあり、どこを見ればよいかさえわかりません。その時点まではすべて問題ないようです。