kkuzil.own@gmail.com

Posted
Filed under Development/Delphi

  PEntry = ^TEntry;
  TEntry = packed record
    case Integer of
    0 : (Head: TEntryHead);
    1 : (Data: array [0..511] of AnsiChar);
  end;
이런 구조체가 있을때,
...
..

var
  e: TEntry;
begin
  ReadData(...., ...., @e);
end;

이 경우 포인터가 잘못 되었다는 메시지가 뜨면서 에러가 발생한다.
코드상.. 아무런 잘못도 없는거 같아서..
ReadData(...., ...., @e.Data[0]);

머 이렇게 해도 안되고..

그래도 계속 트라이 하는중에 알아냈다.

 TEntry = packed record

여기서 packed  빼 주니깐 된다는..

기본 바이트 정렬을 사용하지 않고 packed를 해주면
컴파일러가 내부 포인터를 어떻게 써야하는지 헷갈리나보다..

아무튼 다음에도 이런문제가 생기면 기억나도록 이렇게 기록함.
2012/07/31 16:00 2012/07/31 16:00