나를 때리는 퍼즐. 간단한 테스트 하네스 코드에서 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와 Intel 컴파일러 모두 비슷한 기능을합니다.
버퍼가 stdout에있을 수 있지만 버퍼가 채워지면 자동으로 플러시되지 않아야한다는 것을 알고 있습니까? 여기
컴파일러 버전, OS 및 실행중인 메모리에 대한 자세한 정보가 필요합니다. 적어도 우리 부부는이 문제를 보지 못하고 있습니다. –
또한 "reverse.exe