문제

한 파일 형식을 다른 파일 형식으로 변환하는 간단한 작은 프로그램이 있습니다.fprintf()에 대한 호출이 꽤 많이 있습니다(변환할 파일의 크기에 대략 선형적으로 의존함).내가 시작했을 때 fflush()에 대한 호출이 없었습니다.작은 파일(<10Kb)에서는 아무런 문제가 없었습니다.더 큰 파일(>40Kb)에서는 fclose() 호출에 도달하면 모든 것이 충돌했습니다.

그래서 버퍼를 너무 많이 채우게 하고 있다고 생각하여 fprintf를 대략* 512번 호출한 후(각 호출은 8~10자 사이를 인쇄함) fflush()를 호출했습니다.fclose() 호출 시 프로그램이 여전히 충돌합니다.

*실제로 fprintf 호출 횟수를 계산하지 않고 이미 프로그램에 있는 다른 횟수를 사용하고 있기 때문에 이 숫자가 512보다 작을 수 있습니다.

이것은 내 질문으로 이어집니다.fflush()는 언제 호출해야 합니까?특정 양의 데이터가 fprintf된 후에 호출되어야 합니까?아니면 내가 놓친 것이 있습니까?

감사해요

그건 그렇고, 관련이 있는 경우에 대비해 저는 Windows 7(64비트)을 사용하고 있으며 "a+" 모드에서 출력 파일을 열었습니다.

도움이 되었습니까?

해결책

전화하는 것은 완전히 합법적입니다 fprintf 한 번도 전화하지 않고도 필요한 만큼 여러 번 fflush.충돌은 프로그램의 다른 것으로 인해 발생합니다. 대부분 잘못된 메모리 액세스 및 추가로 인해 발생합니다. fflush 전화로는 문제가 해결되지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top