私に当たったパズル。単純なテストハーネスコードでは、stdoutにあまりにも多くの文字をストリームすると、プログラムは失敗します。奇妙だが非常に再現可能。これは、Windowsのみの問題かもしれないが、それは見て簡単です。coutストリームの制限?
#include <iostream>
#include <deque>
using namespace std;
int main()
{
deque<char> d;
char c;
while (cin.get(c)) d.push_back(c);
for (deque<char>::reverse_iterator j = d.rbegin(); j != d.rend(); j++)
cout << (*j);
}
前のコードは、単に標準入力から文字のストリームをロードし、逆の順序でそれらを出力します。それは100Kかそれ以上の文字では正常に動作しますが、Windowsでは大きなファイルに対しては "stdoutを書き込むエラー"というメッセージが表示されてしまいます。それは常に同じキャラクターで死ぬ。 "cat bigfile.txt | reverse.exe"のようなシェルコマンドは、問題を再現するために必要なものです。 MSFTコンパイラとインテルコンパイラの両方が同様に動作します。
私はstdoutにバッファがあるかもしれないが、それが満たされたら自動的にフラッシュするべきではないことを認識していますか?
私はあなたが実行しているコンパイラのバージョン、OS、およびメモリについてもっと詳しく説明する必要があると思います。私たちの少なくとも二人はこの問題を見ていません。 –
また、 "reverse.exe