Ok, heres my code - still crahing with SIGSEGV when I try to close the form:
LLtest
unit LLtest;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
ComCtrls,
LinkedList;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Memo1: TMemo;
StatusBar1: TStatusBar;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
LL: tLinkedList;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
LL.Free;
Button1.Visible := False;
Button3.Visible := True;
ShowMessage('Class freed');
// Form1.Close;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
w: string = 'Test String';
begin
LL.AddItem(@w[1]);
ShowMessage('ItemCount now: ' + IntToStr(LL.ItemCount) +
' ItemSize is: ' + IntToStr(LL.ItemSize));
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
//LL.Create(100);
LL := tLinkedList.Create(100);
Button3.Visible := False;
Button1.Visible := True;
ShowMessage('LL Created');
end;
end.
and my Class unit:
unit LinkedList;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, cmem;
Type
ItemRec = Record
Prev,
Next: Pointer;
Item: array of char;
end;
tLinkedList = Class
First,
Last,
Curr: ^ItemRec;
ItemCount: LongInt;
ItemSize: LongInt;
Constructor Create(s: LongInt);
Destructor Free;
Procedure AddItem(Item: Pointer);
end;
implementation
Constructor tLinkedList.Create(s: LongInt);
begin
First := Nil; // I think I read somewhere that
Last := Nil; // variables in classes are auto-init
Curr := nil; // but I want to be sure
ItemCount := 0;
ItemSize := s;
end;
Destructor tLinkedList.Free();
begin
if first = nil then exit;
// Free the entries here
end;
Procedure tLinkedList.AddItem(Item: Pointer);
begin
Inc(ItemCount);
// Build the linked list
end;
end.