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
[60159] Re:Re:스트럭쳐 할때요
한수동 [hsd1987] 998 읽음    2010-02-05 14:29
별도로 하라는 말씀은 sizeof(P_t) - sizeof(S_t *) + (sizeof(S_t) * Count); 에서
-sizeof(S_t *) 부분을 빼라는 말씀이신가요? 흠.. 해봤는데요 안되네요;;


강신영.Divinespear 님이 쓰신 글 :
: Proto->S 는 그냥 포인터로 선언되어 있기 때문에, 메모리를 별도로 할당하셔야 합니다.
:
: 한수동 님이 쓰신 글 :
: : typedef struct    {
: :         unsigned char     T;
: :         unsigned char     S;
: :         unsigned short     M;
: : }S_t;
: :
: : typedef    struct  {
: :         unsigned short    H;
: :         unsigned char    M;
: :         S_t          *S;
: : } P_t;
: :
: : int         Count       = 사용자가 원하는 만큼의 수;
: : int         TotalSize  = sizeof(P_t) - sizeof(S_t *) + (sizeof(S_t) * Count);
: : P_t       *Proto       = (P_t *) new unsigned char[TotalSize];
: :
: : 제가 S_t 라는 스트럭쳐를 하나 만들고요
: : 그리고 P_t 라는 스트럭쳐에
: : S_t 스트럭쳐 하나를 포인터로 선언 했습니다
: :
: : 그리고 나서 new 를 이용해서 제가 원하는 사이즈만큼 메모리 공간을 잡았습니다
: : (Count는 제가 원하는 S_t의 수입니다)(이렇게 한 이유는 S_t가 몇개가 필요한지 모르기 때문입니다)
: :
: : 그리고 나서 Proto->S[0].T  이런식으로 불러내면 자동완성 기능에는 문제 없이 뜨고 컴파일도 잘 되는데
: :
: : 이상하게 프로그램상에서 Proto->S[0].T  구문을 부르려고 하면 자꾸 Memory Violation 이 뜹니다 왜 그런거죠?
: :
: : 그래서 스트럭쳐에 있는 S를 포인터로 잡지 않고 S[] 이런 배열 식으로 잡으니까 되네요;; 포인터로 잡으나 배열로 잡으나 같은 포인터인데 왜 그런지 모르겠네요 ㅡㅡ;;
: : (혹시나 해서 #pragma pack 으로 묶어 보기도 했습니다)

+ -

관련 글 리스트
60155 스트럭쳐 할때요 한수동 990 2010/02/05
60167     Re:스트럭쳐 할때요 ÀX 1022 2010/02/05
60156     Re:스트럭쳐 할때요 강신영.Divinespear 912 2010/02/05
60159         Re:Re:스트럭쳐 할때요 한수동 998 2010/02/05
60166             Re:Re:Re:스트럭쳐 할때요 Nibble 1083 2010/02/05
60170                 Re:Re:Re:Re:스트럭쳐 할때요 한수동 1019 2010/02/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.