[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