Einzelnen Beitrag anzeigen

Kampfheizung

Registriert seit: 6. Jul 2012
8 Beiträge
 
#1

Array of Record Speicher/Finalization Problem

  Alt 6. Jul 2012, 17:08
Delphi-Version: XE2
Moin Moin,

ich hab da ein kleines/großes Problem bei meiner Seminar-Aufgabe.

Ich habe mir ein Record gemacht der wiefolgt aussieht :

type
Lines = record
x : array [0..1] of integer;
y : array [0..1] of integer;
end;

und dieser Record wird jetzt einer Variable zugewiesen

var Lines_points : array of Lines;

ich möchte mehrere Linien haben mit Anfangspunkt[0] und Endpunkt[1] die ich dann später auf Collision usw. überprüfen kann.

Problem ist :

Immer wenn ich meinen Spieler nach oben bewege und x/y drücke zählt er Anz_Lines um 1 hoch
und setzt dann die Länge meiner Variable Lines_points auf Anz_Lines und speichert dann zuerst den Anfangspunkt
und dann wenn eine andere Pfeiltaste gedrückt wurde den Endpunkt und zählt danach wieder Anz_Lines hoch
weil ja wieder eine neue Pfeiltaste gedrückt wurde und er ja eine neue Linie beginnt.

So speichere ich zurzeit meine Koordinaten - wenn da schon Fehler sind gleich mir auf die Finger haun.

Nun gehts dann weiter und er zeichnet bei jedem OnPaint-Ereignis meiner Paintbox das Spielfeld ( mit samt der Linien ) neu :

procedure TMain.P_Spielfeld();
var
i : integer;
begin

°
°
°
for I := low(lines_points) to high(lines_points) do
begin
Anzeigeflaeche.canvas.MoveTo(Lines_points[anz_lines].x[0], Lines_points[anz_lines].y[0]);
Anzeigeflaeche.Canvas.LineTo(Lines_points[anz_lines].x[1], Lines_points[anz_lines].y[1]);
end;

end;

das funktioniert schon nicht so wie ich haben möchte - weil er zeichnet i-wie immer nur so ganz lütte Striche
obwohl ich jetzt vom obersten Rand bis zum Untersten Rand zeichne und wenn ich das Fenster minimiere und wieder aufrufe
habe ich dann nur ein einzigen langen Strich der immer vom 0 Punkt bis zu dem letzten gezeichneten Punkt geht.

Das ist aber gerade nicht mein "großes" Problem, sondern das wieder freigeben meiner Variable :

finalize(lines_points);

ich hab überall gesucht und so genaue Eingebungen kamen da nicht - viele meinten das der Garbage-Collector alles
brav bereinigt und der Speicher wieder frei ist andere - das man die Länge wieder auf 0 setzen würde damit alles nil
ist (was aber eigentlich finalize macht(?) ).

Und immer wenn ich dann mein Programm schließe bekomme ich immer schön tausende an Speicher-Errors weil er den
Speicher nicht freibekommt.

Danke schonmal für die Hilfe
Mit freundlichen Grüßen
Marcel
  Mit Zitat antworten Zitat