리눅스 세그멘테이션 오류 (NULL pointer exception) : fopen() 실패이후 fclose()를 부르면 생기는 문제
Q: 리눅스 세그멘테이션 오류
FILE *fp = fopen(fp_name,"r");
if(fp == NULL)
{
printf("파일이 존재하지 않습니다.\n");
fclose(fp);
close(serv_sock);
exit(1);
}
위 코드를 리눅스에서 실행하면 세그멘테이션 오류가 납니다.
저기서 fclose를 지우면 오류가 사라지고 잘 실행되는데
fp가 NULL일 경우 fp를 닫으면 원래 오류가 생기나요?
생긴다면 저기서 fclose를 하지 않아도 되나요?
A: 안녕하세요. 리얼리눅스 입니다.
fclose() 함수의 인자(input) 이 잘못되어서 생기는 문제입니다.
if(fp == NULL) 문 조건에 들어갔다는것은
fp 값은 NULL 인것이고
따지자면 fclose(NULL); 와같은 코드로 실행했다는것을
의미합니다. 따라서 NULL point exception 이 발생하고 세그먼트폴트가 발생할 수 있습니다.
fopen() 이 정상적으로 되었다면 그 return 값을
fclose() 인자로 넣어주는것은 문제가 되지않고
정상적인 방식입니다. 다만 fopen()이 비정상적으로
되어서 (예: 파일이 존재하지않을때 등) return 값이
NULL 이라면 open 조차도 되지않았기때문에 굳이 close 를 할필요가 없다고 이해하면 되겠습니다.
*관련 교육을 찾으신다면 리얼리눅스 교육과정 중 리눅스 시스템 핵심정리 수업을 추천드립니다.\
Real Linux | 최신트렌드 리눅스 전문교육|임베디드|서버
직장인을 위한 리눅스교육
reallinux.co.kr
'리눅스 Q&A' 카테고리의 다른 글
커널 컴파일(make) 중 "[N/y/?]" 같은 문구가 자꾸 뜨는 이유 (1) | 2023.11.27 |
---|---|
Ubuntu 22.04 + VirtualBox 부팅중 amd_cpuid4 관련 커널패닉(kernel panic) 문제 해결 방법 (0) | 2023.11.22 |
문자열을 int 숫자로 변경하는 함수 atoi() 사용법 (0) | 2023.09.19 |
임베디드 개발자 채용과 전망에 대한 생각 (0) | 2023.09.19 |
리눅스 C 프로그래밍 : 폴더 경로명 날짜변수로 open 하는 방법 (0) | 2023.09.11 |