Головоломка, которая ударила меня. В некотором простом тестовом коде, если я передаю слишком много символов в stdout, программа завершается неудачно. Странно, но очень воспроизводимо. Это может быть проблема только для Windows, но это легко увидеть:
#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);
}
Предыдущий код просто загружает поток символов из стандартного ввода и выводит их в обратном порядке. Он отлично работает до 100 КБ или около того символов, но умирает с сообщением «Ошибка записи стандартного вывода» в Windows для файлов большего размера. Он всегда умирает с одним и тем же персонажем.
Команда оболочки типа "cat bigfile.txt | reverse.exe" - это все, что вам нужно, чтобы воспроизвести проблему. И компиляторы MSFT и Intel действуют одинаково.
Я понимаю, что на stdout может быть буфер, но не должен ли он автоматически очищаться при заполнении?