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
[55536] Re:Re:vector를 사용해서 클래스를 관리하는데 이상한 점이 있습니다.
이용태 [kidary97] 907 읽음    2008-12-23 19:12
객체 안에 있는 short형 포인터는 동적으로 할당된 메모리를 가리킬 포인터 입니다.

short* 변수의 sizeof()를 하면 포인터 변수의 크기이므로 4byte = 32bit가 나오네요..

장성호 님께서 먼가 착각하셨던거 같습니다..


다시 원래 문제로 돌와오면 TDataHanding_ECT 객체를 벡터에 넣어서 할 경우엔 위와 같은 문제가 생기는 반면에... 벡터를 사용하지 않고,  TDataHandling_ECT 객체 배열을 사용하면 이상없이 잘 됩니다.

머가 문제인지 모르겠습니다...ㅠㅠ


장성호 님이 쓰신 글 :
: 다른것은 잘 모르겠구요
:
: 객체를 저장할 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를 사용해서 클래스를 관리하는데 이상한 점이 있습니다. 이용태 1097 2008/12/23
55545     Re:vector를 사용해서 클래스를 관리하는데 이상한 점이 있습니다. sirius 1642 2008/12/24
55535     Re:vector를 사용해서 클래스를 관리하는데 이상한 점이 있습니다. 장성호 1026 2008/12/23
55536         Re:Re:vector를 사용해서 클래스를 관리하는데 이상한 점이 있습니다. 이용태 907 2008/12/23
55537             Re:Re:Re:vector를 사용해서 클래스를 관리하는데 이상한 점이 있습니다. 장성호 1126 2008/12/23
55539                 Re:Re:Re:Re:vector를 사용해서 클래스를 관리하는데 이상한 점이 있습니다. 이용태 1088 2008/12/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.