Also es passiert folgendes:
Code: Alles auswählen
procedure Thauptfenster.startbuttonClick(Sender: TObject);
var primz: array of boolean;
begin
...
setlength(primz, spinedit1.value); //bis zu 1000000000
Sieb(primz);
...
for z:=2 to spinedit1.Value do if primz[z] then ... ;//blabla
...
setlength(primz,1);
//alternativ primz:=nil; oder: finalize(primz);
...
end;
procedure Thauptfenster.Sieb(var a: array of boolean);
var bis,c,i,w:integer;
begin
bis:=...;
for c:=1 to bis do a[c]:=true;
w:=...;
for c:=1 to w do
begin
if a[c] then
begin
i:=c*c;
repeat
a[i]:=false;
inc(i,c);
until i>bis;
end;
end;
end;
Nachdem die Prozedur Thauptfenster.startbuttonClick komplett durchgelaufen ist, müsste doch der Speicher freigegeben werden. Aber bei keiner der drei Varianten passiert das!
Es ist auch kein Fehler in der Anzeige des Taskmanagers. Mein Programm belegt fast den ganzen Speicher und andere Prozesse müssen dann auf die Auslagerungsdatei zurückgreifen...
