Witam, ostatnio zabrałem się za pisanie listy zdarzeń do gierki RPG i wszystko szło dobrze, ale gdzieś mam wyciek pamięci i nie mogę go zlokalizować, przypuszczam że ma to związek z użyciem obiektu TEvent1, zresztą sami zobaczcie kod:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
PEvent1 = ^TEvent1;
TEvent1 =
object
msg: string;
procedure Process;
end;
PMapEvent = ^TMapEvent;
TMapEvent =
record
EventType: Word;
Event: Pointer;
NextEvent: PMapEvent;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TEvent1.Process;
begin
Form1.ListBox1.Items.Add(msg);
end;
procedure AddEvent(event: Pointer;eventlist: PMapEvent; id: Word);
begin
New(eventlist.NextEvent);
eventlist^.NextEvent.EventType := id;
eventlist^.NextEvent.Event := event;
eventlist^.NextEvent.NextEvent := nil;
end;
procedure ProcessEvents(event: PMapEvent);
var
temp: PMapEvent;
begin
temp := event;
while (temp <> nil) do
begin
case temp.EventType of
1:
begin
TEvent1(temp.Event^).Process;
end;
end;
temp := temp^.NextEvent;
end;
end;
function CreateMsgEvent(msg: string): Pointer;
var
temp: PEvent1;
begin
New(temp);
temp^.msg := msg;
Result := temp;
end;
procedure FreeEvents(event: PMapEvent);
var
temp: PMapEvent;
begin
while (event <> nil) do
begin
temp := event^.NextEvent;
event^.NextEvent := nil;
Dispose(event.Event);
event.Event := nil;
Dispose(event);
event := temp;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
firstevent: TMapEvent;
event: PMapEvent;
e: TEvent1;
begin
ListBox1.Clear;
e.msg := '1st Event';
firstevent.EventType := 1;
firstevent.Event := @e;
event := @firstevent;
AddEvent(CreateMsgEvent('Event nr 2'),event, 1);
event := event^.NextEvent;
AddEvent(CreateMsgEvent('Event three'),event, 1);
ProcessEvents(@firstevent);
FreeEvents(firstevent.NextEvent);
end;
end.
PROSZĘ O POMOC W ZNALEZIENIU WYCIEKU PAMIĘCI