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@delphi.org.nz
[2]
Admin: http://delphi.org.nz/mailman/listinfo/delphi [3]
Unsubscribe:
send an email to delphi-requ...@delphi.org.nz [4] with Subject:
unsubscribe

 

Links:
------
[1] mailto:del...@moorhouse.net.nz
[2]
mailto:delphi@delphi.org.nz
[3]
http://delphi.org.nz/mailman/listinfo/delphi
[4]
mailto:delphi-requ...@delphi.org.nz
_______________________________________________
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