|
VC++와는 너무 다른가 보네요.
질문이 좀 난잡합니다. T.T
이해해 주세요....
1. 변수 선언시... 예를들면 말이죠... 아래처럼
TButton *Button2;
이럴경우 Button2라는 변수를 사용하기 위해서는 new 연산자로
메모리를 할당해 주어야 하는것 아닌가요?
그리고 메로리를 할당 받을 때 Contructor가 호출되는 것이 아닌지요.
DEBUGGING 을 해보니 변수 선언시에 Constructor가 호출되는 것 같아서요.
2. Thread 사용시의 동적 메모리 사용에 관하여.
Thread Class 재정의 시에 만들어서 사용하는 각종 함수의 내부에서
동적 메모리의 생성은 금지 되어 있는건지요?
3. 아래 제가 올린 코드에서 에러가 납니다.
설명에서처럼 첫번째 실행에서는 에러가 나질 않는데,
같은 함수를 다시 사용했을 경우, 엉뚱한 다른 변수의 내용이 바뀝니다.
이줄이 실행되면서 메모리 바뀜
----->TSetupFrm *setup=new TSetupFrm(this);
답변 주심 정말로 정말로 감사하겠습니다.
--- 빌더 포기의 위기에 휩싸인 악동 ---
###########MainFrm.h################################
class TMainFrm : public TForm
{
__published:
TButton *Button2;
TButton *Button7;
void __fastcall Button2Click(TObject *Sender);
void __fastcall Button7Click(TObject *Sender);
public:
__fastcall TMainFrm(TComponent* Owner);
MainRun *run; <----------------- 이 메모리가 변경됨
};
###########MainFrm.cpp################################
void __fastcall TMainFrm::Button7Click(TObject *Sender)
{
if(run==NULL) {
run=new MainRun; ---->많은 동적 메모리를 형성합니다.(new 연산자 사용)
run->InitModule();
}
}
void __fastcall TMainFrm::Button2Click(TObject *Sender) --->이 버튼을 눌러 실행시, 첫번째
{ 실행은 정상입니다. 두번째 실행
TSetupFrm *setup=new TSetupFrm(this); 시 엉뚱하게도
setup->ShowModal(); 위에 있는 run의 데이터가
delete setup; 변경됩니다.
}
##############SetupFrm.h################################
__fastcall TSetupFrm::TSetupFrm(TComponent* Owner)
: TForm(Owner)
{
member=NULL;
}
//---------------------------------------------------------------------------
##############SetupFrm.cpp################################
void __fastcall TSetupFrm::FormCreate(TObject *Sender)
{
if(member==NULL){
member=new OTDSConfig; ---->이 변수는 Form Close시 delete됩니다.
}
if(MainFrm->run!=NULL ) {
member=(OTDSConfig *)(MainFrm->run->data);
}
else
{
if(!member->ReadConfig() ) member->SetDefault(member->nDataLen);
}
refresh();
}
|