Registriert seit: 21. Jun 2002
602 Beiträge
|
3. Okt 2002, 18:28
Hi Stephan,
du musst immer etwas freigeben, wenn du Speicher reservierst. Da gibt es bestimmte Befehlspaare.
- Zu jedem TObject.Create muss auch ein TObject.Free. Wichtig ist, dass du nicht vor dem freigeben der Variable ein anderes Objekt zuweist:
Code:
var
a: array[1..100] of TStringList;
i: Integer;
// ...
for i := 1 to 100 do
a[i] := TStringList.Create;
// Arbeiten mit den Stringlists
for i := 1 to 100 do
a[i] := TStringList.Create;
Die ersten 100 Stringlists sind verloren, du wirst nie wieder auf sie zugreifen können. Richtig wäre folgendes:
Code:
for i := 1 to 100 do
a[i] := TStringList.Create;
for i := 1 to 100 do
a[i] := TStringList.Free;
// Arbeiten mit den Stringlists
for i := 1 to 100 do
a[i] := TStringList.Create;
for i := 1 to 100 do
a[i] := TStringList.Free;
- Zu jedem GetMem/StrAlloc etc. muss auch ein FreeMem/StrDispose etc.
Auch hier gilt: wenn du einem Pointer eine neue Speicherstelle zuweist, dann wars das.
Tödlich:
Code:
var
p: Pointer;
// ...
GetMem(p, 10240); // 10 kb Speicher
// Arbeiten mit p
GetMem(p, 20480); // 20 kb
Richtig:
Code:
GetMem(p, 10240); // 10 kb Speicher
FreeMem(p);
// Arbeiten mit p
GetMem(p, 20480);
FreeMem(p);
MfG,
d3g
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
|
|
Zitat
|