[fpc-pascal]Dynamic Variables
Michael Van Canneyt
michael.vancanneyt at wisa.be
Fri Aug 31 09:21:51 CEST 2001
On Fri, 31 Aug 2001, Brad Campbell wrote:
> G'day all..
>
> Using fpc in OBJPAS mode I manipulate variables like this..
>
> Type
> TTheRec = Record
> A : String[80];
> B : Cardinal;
> End;
> PTheRec = ^TTheRec;
> Var
> DynArray : PTheRec;
> Begin
> GetMem(DynArray,SizeOf(TTheRec)*30);
> DynArray[1].A := 'Hello';
> DynArray[2].B := 42;
> FreeMem(DynArray,SizeOf(TTheRec)*30);
> End;
>
> Under Mode Delphi, I have to do this..
>
> Type
> TTheRec = Record
> A : String[80];
> B : Cardinal;
> End;
> PTheRec = Array [1..(MaxInt Div SizeOf(TTheRec))-1] of TTheRec;
> Var
> DynArray : ^PTheRec;
> Begin
> GetMem(DynArray,SizeOf(TTheRec)*30);
> DynArray[1].A := 'Hello';
> DynArray[2].B := 42;
> FreeMem(DynArray,SizeOf(TTheRec)*30);
> End;
>
> Is this the best way ?
It depends. If you're using the 1.1 compiler, the best way is to
use dynamic arrays:
Type
TheRec = Record
A : String[80];
B : Cardinal;
End;
Var
DynArray : array of TTheRec; // No length specified
Begin
SetLength(DynArray,30);
DynArray[1].A := 'Hello';
DynArray[2].B := 42;
End; // Compiler disposes of dynarray by itself.
For version 1.0 I would use the objfpc way, as it resembles more the dynamic
array method.
Michael.
More information about the fpc-pascal
mailing list