반응형

출처: 

http://seonissi.tistory.com/5

http://stackoverflow.com/questions/8717225/fclose-causing-segmentation-fault


fclose() 함수에서 segmentation fault 오류가 나서 검색하면서 다음과 같은 걸 알게 되었다.


1. fopen() 함수에서 오류가 났을 시 fclose()를 불러 줘야 하는가.


나는 운이 좋았는지 fopen() 에서 오류가 나지는 않았다.

그런데 찾아보니 fopen()에서 오류, 즉 NULL을 반환했다면 fclose()를 불러줄 필요가 없다고 한다.

사실 불러줄 필요가 없다기 보다는, 불러서 오류가 날 가능성이 더 커보이긴 하다.

NULL을 리턴했는데 그 NULL로 다시 뭔가를 하려고 한다는 자체가 더 위험한 발상이니...

가만 생각해보면 당연한 것임에도 종종 그런 걸 놓치는 거 같다.

여튼 코드는 그래서 fopen()이 파일 디스크립터를 반환할 때만 불러주게끔 수정하였다.


2. fclose()에서 segmentation fault 오류


솔직히 조금 뜬금없는 오류라서 당황했는데, 역시나 검색 결과도 그랬다.

두 번째 링크를 읽어보니 함수 스택이 오염되었을 가능성이 높다고 적혀있었다.

그래서 나도 다른 걸 고치다보니 자연스럽게 fclose()에서의 segmentation fault 오류도 사라졌다.

반응형
Posted by 애콜라이트
l

free counters