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
[52516] 벡터에 클래스를 넣었는데 멤버 변수 중 하나가 delete 되지 않아요...
이용태 [kidary97] 1545 읽음    2008-03-03 17:57
스플릿터를 핸들링 할 수 있는 클래스를 만들어 놓고.. 이 클래스를 벡터에 넣어서 관리를 할려고 합니다.

그런데 자꾸 에러가 나네요.. 왜 그런지 모르겠습니다.

일단 스플릿터를 핸들링하는 클래스는 아래와 같습니다.

여기서 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 할때 에러가 발생하는지 도무지 이해가 안갑니다.

답변 부탁드립니다.

+ -

관련 글 리스트
52516 벡터에 클래스를 넣었는데 멤버 변수 중 하나가 delete 되지 않아요... 이용태 1545 2008/03/03
52529     Re:벡터에 클래스를 넣었는데 멤버 변수 중 하나가 delete 되지 않아요... 1529 2008/03/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.