[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