Haven't got into the details of your problem, but here is an article
which goes into the details
of array of const.

http://rvelthuis.de/articles/articles-openarr.html

Hope it helps,

Cheers,
Colin

On 25 August 2011 09:40, David Moorhouse (DUG) <del...@moorhouse.net.nz> wrote:
> 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
>

_______________________________________________
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

Reply via email to