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
[28132] Re:[질문]Stack overflow 에러가 나는데.....
유영인 Cuperido [cuperido] 2204 읽음    2003-12-06 05:15
답변 늦어서 정말 죄송합니다. ^^;

: : BEGIN_MESSAGE_MAP
: :    MESSAGE_HANDLER(WM_ENDSESSION,TMessage,WMEndSession);
: : END_MESSAGE_MAP(TUSeoulMainForm)                                 

부분을

: : BEGIN_MESSAGE_MAP
: :    MESSAGE_HANDLER(WM_ENDSESSION,TMessage,WMEndSession);
: : END_MESSAGE_MAP(TForm)                                 

이렇게 우선 변경해 주세요. 재귀 호출이 계속 되면서 Stack Overflow 가 우선 발생하고요.

그리고, 컴파일시에 Stack Overflow 가 발생하는것은, 너무 많은 메모리가 선언에 사용되지
않았나 보시는 것이 좋으실것 같습니다.

스택을 늘리는 방법도 있지만, 컴파일러에서 늘리는 한계가 있고요, 무조건 한계를 늘리는 것이 좋은
방식은 아니므로, Stack 영역에 있는 것을 Heap 영역으로 바꾸는 작업으로 해결하시는 방법이
좀 더 깔끔한 방법이 아닌가 싶습니다.

예를들어..

char    caTest[30000];

이렇게 선언된 것은 스택에 30000 byte가 잡힙니다. 그렇지만..

char    *caTest;
caTest = (char *)malloc(30000);
free(caTest);

이런 방식으로 사용하신다면, 힙 영역에 30000 byte가 잡힙니다. 힙 영역은 2GB이므로, 거의 무한대라고
생각하시면 됩니다. (단, 다른 응용프로그램과 같이 사용합니다)

메모리 설정, 해제를 일일히 해줘야 한다는 불편함이 있지만, 익숙하신다면 별로 신경쓰이시지 않으실
거라 생각합니다. ^^


cuperido


조진수 님이 쓰신 글 :
:  아래와 같이 하면 에러가 하나 발생하는데.... 디버깅 할때 "Stack overflow"가 발생 하는데... 처음엔
:
: 무시하고 넘어갓는데.....  지금 다시 해보니... 컴파일이 안돼고 에러 메세지가 뜨네여....
:
: 메세지 창에 메세지는 아래와 같습니다.
:
: -> Project abc.exe raised exception class EStackOverflow with message "Stack overflow". Process
:
: Stoed Use Step or Run to continue
:
: 어디가 잘못되서 이런 메세지가 발생 한건가여?? 답변 부탁드립니다.
:
: :
:   <<abc.h >>
: : void __fastcall WMEndSession(Messages::TMessage &Msg);   //스택 오버 플러우라는 에러 발생
: : BEGIN_MESSAGE_MAP
: :    MESSAGE_HANDLER(WM_ENDSESSION,TMessage,WMEndSession);
: : END_MESSAGE_MAP(TUSeoulMainForm)                                 
: :
:   <<abc.cpp>>
: : void __fastcall TUSeoulMainForm::WMEndSession(TMessage &Msg)
: : {
: :     if(Msg.WParam==true)
: :     {
: :         SystemHaltNow=true;
: :     }
: :     Msg.Result=0;
: : }
: : //---------------------------------------------------------------------------
: :
: : void __fastcall TUSeoulMainForm::FormCloseQuery(TObject *Sender,
: :       bool &CanClose)
: : {
: :     //Close();
: :
: :     if(ComPort->Connected)
: :         ComPort->Close();
: :     if(TrayIcon->Visible)
: :         TrayIcon->Visible = false; //DestroyComponents();//     = False;
: :     if(ComPortTimer->Enabled)
: :         ComPortTimer->Enabled = False;
: :
: :     CanClose=SystemHaltNow;
: : //    Close();
: : }
: : //---------------------------------------------------------------------------

+ -

관련 글 리스트
28118 [질문]Stack overflow 에러가 나는데..... 조진수 1217 2003/12/04
28132     Re:[질문]Stack overflow 에러가 나는데..... 유영인 Cuperido 2204 2003/12/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.