C 언어 기초
C 언어에서 NULL 포인터를 참조했을(p가 NULL일 때 *p를 읽었을) 때의 설명으로 올바른 것은?
- A규격상 실행 시 오류로 반드시 검출되게 되어 있어, 어느 환경에서나 오류 메시지를 내고 프로그램이 멈춘다
- BNULL은 0번지를 가리킨다고 정해져 있으므로, 어느 환경에서나 0번지의 내용이 읽히고 그대로 처리가 계속된다
- C미정의 동작이며, OS 위에서는 일반적으로 비정상 종료하지만, MMU가 없는 마이컴에서는 0번지를 읽을 수 있어 알아차리지 못하기도 한다
정답과 해설 보기
정답: C. 미정의 동작이며, OS 위에서는 일반적으로 비정상 종료하지만, MMU가 없는 마이컴에서는 0번지를 읽을 수 있어 알아차리지 못하기도 한다
NULL 포인터의 참조는 미정의 동작으로, 무슨 일이 일어날지는 규격에서 정해져 있지 않습니다. Linux나 Windows에서는 0번지 부근에 페이지를 할당하지 않으므로, 참조하면 페이지 폴트가 일어나 일반적으로 프로그램은 비정상 종료합니다(Linux의 세그멘테이션 위반 등). MMU를 갖지 않는 작은 마이컴에서는 0번지에 플래시 메모리나 인터럽트 벡터 표가 있어 읽혀 버리는 경우가 있으며, 실수가 드러나지 않은 채 오동작하기도 합니다. 포인터를 사용하기 전에 NULL이 아님을 확인하는 것이 중요합니다.