접근 위반 예외 처리
프로그램 주소 공간 외부의 메모리에 접근할 때 무서운 접근 위반 예외가 자주 발생합니다. 표준 C는 이 예외를 포착하기 위한 기본 메커니즘을 제공하지 않으므로 개발자는 플랫폼별 솔루션에 의존해야 합니다.
그러나 놀라운 예외 전파를 통해 액세스 위반을 포착할 수 있는 교활한 접근 방식이 등장했습니다. 순수 C의 예외. 이 마법은 신호 처리기 내에서 자체 예외를 발생시키고 대신 이를 처리하는 데 있습니다.
다음 코드를 고려하세요.
void SignalHandler(int signal) { printf("Signal %d", signal); throw "!Access Violation!"; } int main() { signal(SIGSEGV, SignalHandler); try { *(int *)0 = 0; // Deliberately throwing an exception } catch (char *e) { printf("Exception Caught: %s\n", e); } printf("Unleashed, continuing our wicked ways!\n"); }
SIGSEGV에 대한 자체 신호 처리기를 등록하면(액세스 위반 신호 ), 예외를 차단합니다. 핸들러 내에서 메시지를 인쇄하고 "¡Access Violation!"이라는 사용자 정의 예외를 발생시킵니다. main()의 catch 블록은 이 사용자 정의 예외를 포착하고 적절하게 처리합니다.
이 방법을 사용하면 이전에 표준 C에서는 불가능했던 액세스 위반 예외를 우아하게 처리하고 프로그램 제어를 유지할 수 있습니다. 이 색다른 접근 방식은 일반적인 사용에는 권장되지 않습니다. 좋은 코딩 방법은 그러한 예외가 처음부터 발생하는 것을 방지해야 합니다. 그럼에도 불구하고 이는 C의 예외 처리 기능에 대한 흥미로운 탐구 역할을 합니다.
위 내용은 Pure C에서 액세스 위반 예외를 어떻게 처리할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!