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-boun...@lists.freepascal.org> On Behalf Of Tony 
Whyman via fpc-pascal
Sent: Tuesday, September 8, 2020 7:21 AM
To: fpc-pascal@lists.freepascal.org
Cc: Tony Whyman <tony.why...@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@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org 
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to