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
[55535] Re:vector를 사용해서 클래스를 관리하는데 이상한 점이 있습니다.
장성호 [nasilso] 1026 읽음    2008-12-23 18:46
다른것은 잘 모르겠구요

객체를 저장할 Pointer가 왜 short형이죠?

short형이면 2Byte 인데

win32에서 모든 포인터는 32bit인데 16bit로  access하려면 이상하게 동작할수 밖에 없을듯...

먼저 short형을 int형(32bit 형) 으로 바꾸고.. 테스트 해보세요

그럼..

이용태 님이 쓰신 글 :
: 클래스 객체를 vector에 넣어서 데이터를 관리할려고 합니다.
:
: 밑에 소스에서 보는것과 같이..
:
: 지역 클래스 객체 2개를 만든다음에 벡터에 넣고... 메모리를 할당하고 데이터 값을 초기화 합니다.
:
: 그런데 이상한게.. 각 객체에 대해서 따로따로 동적으로 메모리를 할당했는데..
:
: 동적으로 생성된 메모리 주소를 비교해보면 두개의 객체가 한개의 동일한 메모리를 가리킵니다.
:
: 벡터에 어떤 값을 집어 넣을경우에 값에 의한 복사가 이루어지는것으로 알고 있는데요... 서로 다른 객체 2개를 넣으면 서로 다른 복사본 객체 2개가 벡터에 넣어져야 하고 벡터에 들어가 있는 클래스의 멤버포인터 변수에 동적으로 메모리 할당하면 2개의 할당된 메모리가 있어야 하는거 아닌가요?
:
: 왜 그런지 모르겠습니다. 먼가 제가 놓치고 있는 부분이 있는거 같은데요...
:
: 어떤게 틀렸는지 알려주세요...
:
:
: -------------------------------------------------------------------------------------
: 클래스는 다음과 같구요..
:
: class TDataHandling_ECT
: {
:     private :
:         short *pHori;
:         int m_nSize;
:
:     public :
:         TDataHandling_ECT()
:         {
:             pHori = NULL;
:             m_nSize = 0;
:         }
:
:         ~TDataHandling_ECT()
:         {
:             delete [] pHori;
:         }
:
:         void CreateData(int nSize)
:         {
:             m_nSize = nSize;
:
:             pHori = new short[nSize];
:         }
:
:         short* GetHori()
:         {
:             return pHori;
:         }
: };
:
:
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
:     vEct_Data.clear();
:
:     TDataHandling_ECT var;
:
:     vEct_Data.push_back(var);
:
:     vEct_Data[0].CreateData(50);
:     //(vEct_Data.back()).CreateData(50);
:
:     for(int i = 0; i < 50; i++)
:         (vEct_Data.back()).GetHori()[i] = i;
:
:
:     TDataHandling_ECT var1;
:
:     vEct_Data.push_back(var1);
:
:     vEct_Data[1].CreateData(50);
:     //(vEct_Data.back()).CreateData(50);
:
:     if(vEct_Data[0].GetHori() == vEct_Data[1].GetHori())
:         ShowMessage("Same");
: }

+ -

관련 글 리스트
55533 vector를 사용해서 클래스를 관리하는데 이상한 점이 있습니다. 이용태 1098 2008/12/23
55545     Re:vector를 사용해서 클래스를 관리하는데 이상한 점이 있습니다. sirius 1642 2008/12/24
55535     Re:vector를 사용해서 클래스를 관리하는데 이상한 점이 있습니다. 장성호 1026 2008/12/23
55536         Re:Re:vector를 사용해서 클래스를 관리하는데 이상한 점이 있습니다. 이용태 908 2008/12/23
55537             Re:Re:Re:vector를 사용해서 클래스를 관리하는데 이상한 점이 있습니다. 장성호 1127 2008/12/23
55539                 Re:Re:Re:Re:vector를 사용해서 클래스를 관리하는데 이상한 점이 있습니다. 이용태 1088 2008/12/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.