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
[37082] Re:Re:Re:[질문]Form을 이중으로 생성하지 않으려면.
유영인 Cuperido [cuperido] 992 읽음    2004-09-01 15:53
혹시 모르니까 처음에 Form2 = NULL; 으로 초기화 해주시고,
해제 OnClose 이벤트에서....

Action = caFree;
Form2 = NULL;          <- 추가

이렇게 해주시면 되지 않을까 싶습니다.
문제의 원인은 아래의 구문에서 보시면..

char *a;

a = (char *)malloc(10);
free(a);

if(!a) ShowMessage("객체가 안정적으로 해제되었습니다");

이렇게 소스가 있다면, 위의 ShowMessage는 출력이 되지 않습니다.
free 시에 포인터에 주소가 NULL로 초기화 되지 않고 쉽게 말씀드리면,
껍데기는 남아 있다는 것인데 이것은 NULL 로 포인터를 꼭 대입해 주어야 합니다.

dynamic_cast시에 껍데기는 있고 Form 형태가 그대로 있으나 실질적인 포인터가
존재하지 않아서 에러가 발생한 것입니다. 포인터에 관하여 프로그래머들이 가장
실수를 많이 하는 부분이기도 합니다. :)


cuperido


하안인 님이 쓰신 글 :
: 유영인  Cuperido 님이 쓰신 글 :
: : Form->Visible 속성을 비교하여 true 면 보여주지 않을것 같습니다.
: :
: : 만약, 동적생성을 지역내(function 등)에서 하였을 경우에는 Form->Name으로
: : 바로 접근이 되지 않으니, 생성된 TForm*  포인터를 기억해 두시거나, 아니면
: : FindComponent 등의 메소드로 찾아서 접근하시면 될 것 같습니다.
: :
: :
:
: Form2는 동적생성하므로 Visible속성을 사용할수 가 없을 것같구요.
: 생성이 되지 않으면 메소드에 접근할수 없는것 아닌가요.
:
: 제가 하려는 것은
:
:  __fastcall TFom1::Button1Click(Sender.)
: {
:   if(dynamic_cast<TForm *>(Form2))
:   {
:         Form2->Show();         --> 열었다 닫고 다시 클릭하면 이리로......
:   }
:   else
:   { 
:         Form2 = new From2(Application);
:        Form2->Show();
:    }
: }
:
:
:
: ----------------
:
: void __fastcall TForm2::FormClose(TObject *Sender,
:       TCloseAction &Action)
: {
:   Action = caFree;
: }
:
: 위와 같이 해주면 폼을 닫고 다시 버튼을 클릭하면
: 새로 만드는 곳이 아니라 Form2->Show()만 실행되서
: 에러가 발생됩니다.
:
: 폼을 닫고 다시 폼을 열고 하는것입니다.

+ -

관련 글 리스트
37074 [질문]Form을 이중으로 생성하지 않으려면. 하안인 831 2004/09/01
37076     Re:[질문]Form을 이중으로 생성하지 않으려면. 유영인 Cuperido 894 2004/09/01
37080         Re:Re:[질문]Form을 이중으로 생성하지 않으려면. 하안인 794 2004/09/01
37082             Re:Re:Re:[질문]Form을 이중으로 생성하지 않으려면. 유영인 Cuperido 992 2004/09/01
37083                 답변 감사드립니다. - 내용무 하안인 750 2004/09/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.