exception 이 안잡혀요..

bugger의 이미지

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;
}
}

musiphil의 이미지

위 코드에서 예외(exception)가 발생해야 할 이유가 없습니다.

초기화되지 않은 포인터를 사용하는 것은 정의되지 않은 행동(undefined behaviour)을 일으키기 때문에 예외가 발생하는 것도 이론적으로 가능하기는 합니다만, 현실적으로는 그냥 프로그램이 오동작하고 마는 경우가 99.9%라 하겠습니다.

pynoos의 이미지

exception을 프로그램의 실행 오류라고 생각하시면 안됩니다.

exception은 말이 예외일 뿐이지, throw 라는 명시적인 명령없이는 발생하지 않습니다.

sandro의 이미지

코드를 보면

try문 바깥의 extest *etest = new extest; 에서 std::bad_alloc이 일어날 경우에도 exception을 못 잡겠네요

또 예를 든 것 처럼 엉뚱한 메모리에다 값을 쓰면

UNIX 같은 경우 SIGSEGV 시그널이 발생합니다. 이것을 세그먼트 폴트라고 하죠. 이것을 핸들링 할려면 이 핸들링 함수를 등록 해두면 됩니다.

WIN32 같은 경우 커널에서 exception을 발생 시키며 이것을 try 문으로 핸들링 할수 있습니다.

UNIX도 어서 signal 방식보다 exception 방식으로 저런 예외들을 처리했으면 좋겠네요.

無心