[fpc-pascal] Help with TList example

Tony Whyman tony.whyman at mccallumwhyman.com
Tue Sep 8 14:07:11 CEST 2020


See https://www.freepascal.org/docs-html/rtl/system/dispose.html

On 08/09/2020 12:51, James Richters wrote:
> Can you please give me an example of the correct way to use new and dispose?
>
> I'll try the pointer
>
> Thanks for the advice
>
> James
>
> -----Original Message-----
> From: fpc-pascal <fpc-pascal-bounces at lists.freepascal.org> On Behalf Of Tony Whyman via fpc-pascal
> Sent: Tuesday, September 8, 2020 7:21 AM
> To: fpc-pascal at lists.freepascal.org
> Cc: Tony Whyman <tony.whyman at mccallumwhyman.com>
> Subject: Re: [fpc-pascal] Help with TList example
>
> Two observations:
>
> 1. In Pascal you should use "new" and "dispose" to allocate and deallocate record types - not GetMem and FreeMem.
>
> 2. MyRec is a pointer type and you should code the line as
>
> MyRec^.Value := tmp
>
>
> On 08/09/2020 12:10, James Richters via fpc-pascal wrote:
>> I'm trying to figure out how TList works.  I found the code example below by doing a search, but I can't compile it,  I get Error: Illegal qualifier on the line
>>       MyRec.Value := tmp;
>>     It's indicating the error is on the V of Value
>>
>> I tried commenting that line out, then I get the same error on
>>       MyRec.AByte := Byte(tmp);
>> At the A of AByte
>>
>> So I commented that out too and then I get the error on
>>
>>      Writeln('Value: ', MyRecList[tmp].Value, ' AByte: ',
>> MyRecList[tmp].AByte); At the V on Value after MyRecList[tmp].
>>
>> I don't know enough about the syntax to figure out what's wrong here.  Does anyone have any ideas?  It seems like there is something fundamentally wrong.
>>
>> I'm trying to make a temporary list of records.  Kind of like a TStringList, but instead of a list of strings, a list of my own custom records.  Perhaps there is a better way?
>>
>>
>> program Project1;
>> {$mode objfpc}{$H+}
>>
>> uses
>>     SysUtils, Classes;
>>
>> type
>>     PMyRec=^TMyRec;
>>     TMyRec=record
>>       Value: Integer;
>>       AByte: Byte;
>>     end;
>>
>>     TMyRecList=class(TList)
>>     private
>>       function Get(Index: Integer): PMyRec;
>>     public
>>       destructor Destroy; override;
>>       function Add(Value: PMyRec): Integer;
>>       property Items[Index: Integer]: PMyRec read Get; default;
>>     end;
>>
>> { TMyRecList }
>>
>> function TMyRecList.Add(Value: PMyRec): Integer; begin
>>     Result := inherited Add(Value);
>> end;
>>
>> destructor TMyRecList.Destroy;
>> var
>>     i: Integer;
>> begin
>>     for i := 0 to Count - 1 do
>>       FreeMem(Items[i]);
>>     inherited;
>> end;
>>
>> function TMyRecList.Get(Index: Integer): PMyRec; begin
>>     Result := PMyRec(inherited Get(Index)); end;
>>
>> var
>>     MyRecList: TMyRecList;
>>     MyRec: pMyRec;
>>     tmp: Integer;
>> begin
>>     MyRecList := TMyRecList.Create;
>>     for tmp := 0 to 9 do
>>     begin
>>       GetMem(MyRec, SizeOf(TMyRec));
>>       MyRec.Value := tmp;
>>       MyRec.AByte := Byte(tmp);
>>       MyRecList.Add(MyRec);
>>     end;
>>
>>     for tmp := 0 to MyRecList.Count - 1 do
>>       Writeln('Value: ', MyRecList[tmp].Value, ' AByte: ', MyRecList[tmp].AByte);
>>     WriteLn('  Press Enter to free the list');
>>     ReadLn;
>>     MyRecList.Free;
>> end.
>>
>> James
>>
>> _______________________________________________
>> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
>> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
>>
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
>
>


More information about the fpc-pascal mailing list