exception 이 안잡혀요..
글쓴이: bugger / 작성시간: 금, 2003/02/28 - 8:54오후
exception 에 대해 공부를 하고 있는데요..
etest->test() 함수에서 exception 이 발생해야 되는것 아닌가요?? -.-;;
try catch에서 exception을 잡지 못하네요..
미리 답변 감사드립니다.
#include <iostream.h>
class extest
{
private:
char * str;
char * dtr;
public:
extest(){}
~extest(){}
void test();
};
void extest::test()
{
strcpy(str,dtr);
}
int main()
{
extest *etest = new extest;
try{
etest->test();
}
catch(...)
{
cout<<" error catch "<<endl;
}
}
Forums:
예외 발생하지 않습니다.
위 코드에서 예외(exception)가 발생해야 할 이유가 없습니다.
초기화되지 않은 포인터를 사용하는 것은 정의되지 않은 행동(undefined behaviour)을 일으키기 때문에 예외가 발생하는 것도 이론적으로 가능하기는 합니다만, 현실적으로는 그냥 프로그램이 오동작하고 마는 경우가 99.9%라 하겠습니다.
exception을 프로그램의 실행 오류라고 생각하시면 안됩니다.
exception을 프로그램의 실행 오류라고 생각하시면 안됩니다.
exception은 말이 예외일 뿐이지, throw 라는 명시적인 명령없이는 발생하지 않습니다.
---
http://coolengineer.com
코드를 보면 try문 바깥의 extest *etest = new
코드를 보면
try문 바깥의 extest *etest = new extest; 에서 std::bad_alloc이 일어날 경우에도 exception을 못 잡겠네요
또 예를 든 것 처럼 엉뚱한 메모리에다 값을 쓰면
UNIX 같은 경우 SIGSEGV 시그널이 발생합니다. 이것을 세그먼트 폴트라고 하죠. 이것을 핸들링 할려면 이 핸들링 함수를 등록 해두면 됩니다.
WIN32 같은 경우 커널에서 exception을 발생 시키며 이것을 try 문으로 핸들링 할수 있습니다.
UNIX도 어서 signal 방식보다 exception 방식으로 저런 예외들을 처리했으면 좋겠네요.
無心
댓글 달기