|
유엔아이 현입니다.
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가 납니다.
:
: 미리 감사하고요, 조언을 좀 부탁드립니다.
:
|