I have the following code snippet <code> type PConstArray = ^TConstArray; TConstArray = array of TVarRec;
function CreateConstArray(const Elements: array of const): TConstArray; type TLogType = (ltError, ltWarn, ltInfo); PLogData = ^TLogData; TLogData = record LogType: TLogType; LogArgs: TConstArray; end; .... procedure TUserClass.Log(const LogType: TLogType; const Args: array of const ); var LogData: PLogData; begin // size of record TLogData does not work GetMem(LogData, sizeof(TLogData)); LogData.LogType := LogType; // blows up on next line LogData.LogArgs := CreateConstArray(Args); // ... do some other stuff with the LogData item finally calling FreeMem end; function CreateConstArray(const Elements: array of const): TConstArray; var I: Integer; begin SetLength(Result, Length(Elements)); for I := Low(Elements) to High(Elements) do Result[I] := // assign a TVarRec here end; </code> The code that assigns the memory only assigns 8 bytes - and an access violation ensues. If I replace the call to "sizeof" with the number 16, the code works fine. My understanding of dynamic arrays was that the compiler created a 4 byte field before the first element that contained the length of the array. So why does the sizeof function not reflect this ? And why do I need 16 bytes not 12 (4 for LogType + 4 for length of array + 4 for array pointer)? Also regardless of the number of items in the open array parameter, 16 bytes works, so it does not relate the length of the TConstArray. Your thoughts ? David _______________________________________________ NZ Borland Developers Group - Delphi mailing list Post: delphi@delphi.org.nz Admin: http://delphi.org.nz/mailman/listinfo/delphi Unsubscribe: send an email to delphi-requ...@delphi.org.nz with Subject: unsubscribe