C++ 예외 처리에 대해서 질문이~~
글쓴이: studioego / 작성시간: 목, 2005/12/22 - 2:32오전
winapi.co.kr에 있는 질답문 보고 갑자기 궁금해져서 질문하는데요
C++에서 예외처리를 할때 throw를 했을때 그것을 받는 catch가 없다면 널포인터 에러처럼 치명적 에러인가요??
#include <iostream> using namespace std; void print() { int a = 1; if( a != 1 ) cout << "a" << "\n"; else throw 1; } int main() { print(); return 0; }
G++로 돌려보면
이렇게 Abort에러가 뜹니다.
[sungdh86@pcrc ~/clang]$ g++ catch.cpp [sungdh86@pcrc ~/clang]$ ./a.out terminate called after throwing an instance of 'i' Abort [sungdh86@pcrc ~/clang]$
throw을 할때 catch가 없으면 치명적인 오류가 왜 뜨는지 궁금하네요^^
Forums:
책에는 이렇게 쓰여 있네요 If an exception is thro
책에는 이렇게 쓰여 있네요
If an exception is thrown but not caught, the funcion std::terminate() will be called.
첨부하자면
set_unexpected함수를 통해
디폴트 _unexpected_handler함수를
자신의 void f(void)형 함수로 교체할 수 있으며
VS계열에서는 지원이 안된다고 나와있습니다.
C++, 그리고 C++....
죽어도 C++
[quote="ixevexi"]첨부하자면set_unexpected함수
이 자체로는 맞는 말씀인데 set_unexpected()는 예외 명세(exception specification)와
관련된 것이고, uncaught exception과는 별로 관계가 없습니다.
uncaught exception과 set_terminate()의 관계는
unexpected exception과 set_unexpected()의 관계와 같습니다.
"throw한 것을 누군가 받지 않는다면 치명적인 오류가 발생한다"라는
"throw한 것을 누군가 받지 않는다면 치명적인 오류가 발생한다"라는 말을 거꾸로 생각하면, throw 한 것을 누군가 받지 않는다면 무시하고 지나간다 정도인데, 어디로 지나가죠?
throw라는 개념은 스택을 한꺼번에 비우고 catch 문을 찾아 명령 실행 위치가 변경되는 행위입니다. catch가 없을 경우에 프로그램 바깥으로 날아가는 것이 정상적으로 보입니다만....
---
http://coolengineer.com
[quote="pynoos"]catch가 없을 경우에 프로그램 바깥으로
예외 핸들러에 없는 예외가 발생했다는 것은 프로그램 설계 단계부터 고려하거나
예상하지 못한 상황이라는 뜻이죠. 어쩌겠습니까? gg 쳐야죠. ^^;
[quote="doldori"][quote="ixevexi"]첨부하자면
제가 오해한 부분이 있었네요 ^^
uncaught 와 unexpected와의 차이점이 있었네요
오늘 또 하나 알아갑니다
C++, 그리고 C++....
죽어도 C++
댓글 달기