|
스플릿터를 핸들링 할 수 있는 클래스를 만들어 놓고.. 이 클래스를 벡터에 넣어서 관리를 할려고 합니다.
그런데 자꾸 에러가 나네요.. 왜 그런지 모르겠습니다.
일단 스플릿터를 핸들링하는 클래스는 아래와 같습니다.
여기서 TLMD2PaneSplitCtrl 은 LMD 컴포넌트로 상용입니다.
typedef class TVectorDynamicSplitterManageClass
{
private :
TLMD2PaneSplitCtrl *m_pSplit;
int crNo; //create Number
public :
TVectorDynamicSplitterManageClass()
{
m_pSplit = NULL;
crNo = 0;
}
~TVectorDynamicSplitterManageClass()
{
if(m_pSplit != NULL)
{
delete m_pSplit;
ShowMessage("OK");
}
}
void SetSplitter(TLMD2PaneSplitCtrl *pSplit)
{
m_pSplit = pSplit;
}
TLMD2PaneSplitCtrl* GetSplitter()
{
return m_pSplit;
}
void SetcrNo(int nNo)
{
crNo = nNo;
}
int GetcrNo()
{
return crNo;
}
}TVecSplitMan;
이렇게 만든 클래스를 벡터에 담기 위해 벡터를 선언합니다.
std::vector<TVecSplitMan> vSpliter;
이렇게 한 후, 동적으로 스필릿터를 생성한 후에 벡터에 담았습니다.
TLMD2PaneSplitCtrl* pSplit = new TLMD2PaneSplitCtrl(Application);
pSplit->Parent = XiPanel1;
pSplit->Align = alClient;
pSplit->SplitterMain->Direction = sdHorizontal;
pSplit->SplitterMain->Position = pSplit->Height/2;
TVecSplitMan spvar1;
vSpliter.push_back(spvar1);
(vSpliter.back()).SetcrNo(0);
(vSpliter.back()).SetSplitter(pSplit);
담는건 잘 됩니다.. 하지만 프로그램을 종료하면 벡터에 담긴 스플릿터를 지우지 못해 에러가 발생합니다.. 클래스의 소멸자 부분에서요..
디버깅 해보면... 분명 m_pSplit은 NULL 이 아니며 당연히 삭제가 되어야 합니다.. 하지만 delete 할때 에러가 발생하게 되네요...
에러 메시지는 "Project Project1.exe raised exception class EPrivilege with message 'Privileged instruction'."이겁니다..
왜 이런 에러가 날까요?
단순히
TLMD2PaneSplitCtrl* pSplit = new TLMD2PaneSplitCtrl(Application);
delete pSplit;
이렇게 하면 에러 안납니다.. 하지만 왜.. 벡터에만 들어가면 delete 할때 에러가 발생하는지 도무지 이해가 안갑니다.
답변 부탁드립니다.
|