[DUG] Sizeof record gives error
kaller at ihug.co.nz
kaller at ihug.co.nz
Thu Aug 25 12:36:31 NZST 2011
sure ok.
On Thu, 25 Aug 2011 11:57:26 +1200, Robo wrote:
I think
your TLogData contains storage for an integer (TLogType, 4 bytes), and a
pointer to an array (4 bytes).
However, what you need is enough memory to
store the entire array, not just the pointer, so you should get the size of
the array to get the correct size. On Thu, Aug 25, 2011 at 11:40 AM, David
Moorhouse (DUG) wrote:
I have the following code snippet
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;
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 at delphi.org.nz
[2]
Admin: http://delphi.org.nz/mailman/listinfo/delphi [3]
Unsubscribe:
send an email to delphi-request at delphi.org.nz [4] with Subject:
unsubscribe
Links:
------
[1] mailto:delphi at moorhouse.net.nz
[2]
mailto:delphi at delphi.org.nz
[3]
http://delphi.org.nz/mailman/listinfo/delphi
[4]
mailto:delphi-request at delphi.org.nz
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://listserver.123.net.nz/pipermail/delphi/attachments/20110825/6e0feeba/attachment.html
More information about the Delphi
mailing list