C에서 정의되지 않은 동작을 처리하는 방법
C에서 널 포인터 역참조는 예외를 트리거하지 않습니다. 정의되지 않은 동작이 발생합니다. 이 동작은 분할 오류나 충돌로 나타나는 경우가 많습니다.
다음 코드를 고려하세요.
<code class="cpp">try { int* p = nullptr; *p = 1; } catch (...) { cout << "null pointer." << endl; }</code>
널 포인터 역참조가 불가능하므로 "널 포인터 예외"를 포착하려는 이 시도는 작동하지 않습니다. C에서는 예외가 아닙니다. 대신 정의되지 않은 동작을 유발합니다.
해결책: 수동 감지 및 예외 발생
C에서 널 포인터를 수동으로 감지하고 발생하는 경우 예외를 발생시키는 것은 프로그래머의 책임입니다. . 역참조하기 전에 명시적인 확인을 통해 이를 수행할 수 있습니다.
<code class="cpp">if (p != nullptr) { *p = 1; } else { throw invalid_argument("null pointer"); }</code>
명시적으로 예외를 발생시키면 try-catch 블록에서 예외를 포착할 수 있습니다.
C 구현에 대한 참고 사항
Visual C와 같은 일부 C 구현에는 시스템/하드웨어 예외를 C 예외로 "변환"하는 기능이 있을 수 있습니다. 그러나 이러한 비표준 기능은 성능 저하를 수반하므로 의존해서는 안 됩니다.
위 내용은 다음은 질문 형식을 염두에 두고 기사의 핵심을 다루는 몇 가지 제목 옵션입니다. * C에서 Null 포인터를 역참조해도 예외가 발생하지 않는 이유는 무엇입니까? * 언데를 어떻게 처리하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!