- 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를 해주면
컴파일러가 내부 포인터를 어떻게 써야하는지 헷갈리나보다..
아무튼 다음에도 이런문제가 생기면 기억나도록 이렇게 기록함.