一個打動我的謎題。在一些簡單的測試用例代碼中,如果我將太多字符串流到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中對於較大的文件會因「錯誤寫入標準輸出」消息而死亡。它總是死於同一個角色。 像「cat bigfile.txt | reverse.exe」這樣的shell命令就是重現問題所需的全部。 MSFT和英特爾編譯器的行爲都相似。
我意識到stdout上可能有一個緩衝區,但不應該在填充時自動刷新?
我想你需要提供關於你正在運行的編譯器版本,操作系統和內存的更多細節。至少有幾個人沒有看到這個問題。 – 2009-05-23 00:15:39
另外,請嘗試使用類似「reverse.exe
2009-05-23 00:21:04