빌더 메인 쓰레드는 try ~ catch 구분으로 둘러쌓여있습니다.
쓰레드를 생성해서 그런 액세스바이얼레이션을 보고 싶으시다면
빌더 프로젝트.cpp 파일의 try ~ catch 구분을 복사해 보세요.
쓰레드는 자신만의 스택메모리 영역을 가지고 실행되는 일종의 독립 영역입니다.
(책에 자세한 설명이 많을 것이니 참고하세요. :))
시녕tm 님이 쓰신 글 :
: 안녕하세요.
: Form위에 버튼을 하나 두고 버튼을 클릭시 NULL Pointer에다가 값을 쓰도록하여
: 강제적으로 access violation error를 발생해 보았습니다.
: 이 경우에는 실행파일을 직접 실행할 경우 버튼을 누르면
: Access violation at address 004...... 어쩌고 하고 윈도우 에러 창이 실행되는데요
: Thread 의 Execute() 에서 버튼에서와 동일하게 강제로 access violation error를
: 발생 시키면 Access violation at address .... 하고 뜨는 윈도우 에러 창이
: 뜨지않고 Thread 가 그냥 소리 없이 죽습니다.
: 어찌하여 Thread에서는 Access violation 에러를 발생 시켜도 에러 윈도우가
: 안뜨는 것인지 궁금합니다.
:
: 테스트 소스도 압축하여 첨부합니다.
:
:
: void __fastcall MyThread::Execute()
: {
: //---- Place thread code here ----
: int nNumber = 0;
: int *pPointer = NULL;
:
: while(!Terminated){
: ::Sleep(10);
:
: if(nNumber > 10){
: pPointer = 1000; // 강제로 NULL Pointer에 값을 쓰도록하여 error 발생.
: }
:
: nNumber++;
: }
: }
: |