리눅스 세그멘테이션 오류 (NULL pointer exception) : fopen() 실패이후 fclose()를 부르면 생기는 문제
리눅스 세그멘테이션 오류
FILE *fp = fopen(fp_name,"r");
위 코드를 리눅스에서 실행하면 세그멘테이션 오류가 납니다.
저기서 fclose를 지우면 오류가 사라지고 잘 실행되는데
fp가 NULL일 경우 fp를 닫으면 원래 오류가 생기나요?
생긴다면 저기서 fclose를 하지 않아도 되나요?
-------------------------------------------------------------------------------------------------------------------------------
안녕하세요. 리얼리눅스 입니다.
fclose() 함수의 인자(input) 이 잘못되어서 생기는 문제입니다.
if(fp == NULL) 문 조건에 들어갔다는것은
fp 값은 NULL 인것이고
따지자면 fclose(NULL); 와같은 코드로 실행했다는것을
의미합니다. 따라서 NULL point exception 이 발생하고 세그먼트폴트가 발생할 수 있습니다.
fopen() 이 정상적으로 되었다면 그 return 값을
fclose() 인자로 넣어주는것은 문제가 되지않고
정상적인 방식입니다. 다만 fopen()이 비정상적으로
되어서 (예: 파일이 존재하지않을때 등) return 값이
NULL 이라면 open 조차도 되지않았기때문에 굳이 close 를 할필요가 없다고 이해하면 되겠습니다.
*관련 교육을 찾으신다면 리얼리눅스 교육과정 중 리눅스 시스템 핵심정리 수업을 추천드립니다.