C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[59293] 프로그래머들 집합! 같이 생각해보기..
locke [syiware] 1090 읽음    2009-12-02 14:12
안녕하세요. 로크(locke)입니다.

c빌더로 업무개발중 아래와 비슷한 코딩을 하게되었습니다. (c빌더 6입니다)

일단 아래를 봐주세요.

while(true)
{
  try
  {
    break;
  } catch(Exception &e)
  {
    ShowMessage("Error");
  } //catch
} //while
int *a = null;
*a = 54; <-오류 나는 부분(이해를 쉽게하기위해 인위적으로 오류 발생)

while루프안에 try-catch블럭이 있는데
try블럭안에서 break로 루프를 탈출합니다.
루프밖에서 연산오류가 발생하면 루프안의 catch(exception handler)로 프로세스가 이동하여 "Error"라는 오류창을 띄워줍니다.
고로 이 프로그램은 오류창 확인해주면 또 오류나고 무한루프가 되어버립니다.

어떤 한 블럭안에서 오류가 나면 c++컴파일러는 그것을 처리할 수 있는 이벤트 핸들러를 찾아서 넘겨주고
그게 없으면 어플리케이션 오류를 발생시킬텐데
위의 예제를 보면..약간 좀 아이러니합니다.
제가 가만히 생각해보니 try문을 만날때 사용자의 이벤트 핸들러(=catch)를 스택상에 -이미 오류나면 분기할 부분을- 저장하고 있다가 루프안에서 break로 그 블럭을 빠져나올 때
오류시 분기부분을 스택에서 해제하지 않았고 그 이유로 블럭밖에서 오류가 났음에도 불구하고
해당 이벤트 핸들러로 정의된 catch문으로 분기를 하는것 같습니다.
이거 c++빌더 컴파일러의 버그일지? 아니면 c++랭귀지는 모두 다 이렇게 되는건지..
다른 분들은 어떻게 생각하시나요? 여지껏 코딩하면서 이런 경우는 처음 봅니다.
-locke

+ -

관련 글 리스트
59293 프로그래머들 집합! 같이 생각해보기.. locke 1090 2009/12/02
59323     Re:프로그래머들 집합! 같이 생각해보기.. nansama 1124 2009/12/03
59294     Re:프로그래머들 집합! 같이 생각해보기.. locke 1119 2009/12/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.