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
[10502] Re:구조체내에 포함된 구조체에서 데이터읽기
최보현.U&I [uriduri] 924 읽음    2001-08-31 20:05
유엔아이 현입니다.

BBB*  inInfo; 라고 선언을 한다음에 메모리를 할당 하셔야지요~

inInfo = new BBB; 라고 또,

AAA AA 를 포인터로 수정 했더니 않된다구요~~

AAA *AA 라고 ..

당연히 않되는겁니다 ...

포인터는 주소일 뿐이지 공간이 아닙니다 .

일단 메모리가 잡혀 있어야 겠지요~

AA = new AAA;

라고 메모리가 잡혀 있어야 하구요~

그런데 이래두 되지 않습니다 .. 이유는 *nInfo 와 내부에있는 *AA 가 이어진

메모리 공간이 아니라는 점이저 new 나 malloc 으로 메모리를 할당하면 연속된 공간에

메모리를 잡으리라고는 보장 할수 없구요~

따라서 AAA AA 를 포인터로 말고 정적으로 선언해주시고

inInfo 에 메모리 할당을 해주시는게 가장 적합 할것 같구요~

만약 굳이 AAA *AA 로 하구 싶다면

inInfo = (BBB *)new char[sizeof(BBB) - sizeof(AAA *) + sizeof(AAA)];

이렇게 하셔서 연결된 메모리공간을 확보 하실수 있습니다.

구리고 new 나 malloc 로 메모리 할당후엔 메모리를 다사용 하구나면

필히 해제 를 해주어야 한다는것 잊지 마시고요

해제 함수는 delete 나 free 로 하시면 됩니다.

할당 new 해제 delete
할당 malloc 해제 free 이렇게 세트메뉴입니다.

그럼

nSe@L 님이 쓰신 글 :
: 안녕하세요...
:
: 다름이 아니라 아래의 소스를 좀 보아 주시기 바랍니다.
:
: struct AAA
: {
:   double a;
:   double b; 
: };
:
: struct BBB
: {
:   int bb;
:   int cc;
:   AAA AA;
: };
: 를 헤더파일에 넣고,
:
: 이벤트 처리기에다가 다음과 같이 하였습니다.
:
: .
: ..
: ...
:
:   TFileStream* in = new TFileStream(OpenDialog->FileName, frOpenRead);
:   BBB*  inInfo;
:
:   in->ReadBuffer(inInfo, 24);
:
: .
: ..
: ...
:
: 이렇게 하면, inInfo->AA.a에 데이터가 읽혀야 되지 않나요...
: 그렇지 않고... AAA 형 AA를 포인터로 선언하고 읽어보니까 Stream Read Error가 납니다.
:
: 미리 감사하고요, 조언을 좀 부탁드립니다.
:

+ -

관련 글 리스트
10501 구조체내에 포함된 구조체에서 데이터읽기 nSe@L 1251 2001/08/31
10502     Re:구조체내에 포함된 구조체에서 데이터읽기 최보현.U&I 924 2001/08/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.