Es funktioniert auch, wie es soll, aber es lässt sich nicht mehr beenden.
Das Wort "Ende" schreibt es noch und dann bleibt es hängen.
Code: Alles auswählen
program project1;
uses sysutils;
Type
TBoolArray = array of boolean;
TLongWordArray = array of longword;
TSpeicher = Record
Inputs : TBoolarray;
Outputs : TBoolarray;
Counters : TLongWordArray;
end;
var Daten1, Daten2 : TSpeicher;
i: Integer;
f: THandle;
begin
f:=FileCreate('Daten1.dat');
If F=-1 then Halt(1);
setlength(Daten1.Inputs,1);
setlength(Daten1.Outputs,1);
setlength(Daten1.Counters,4);
setlength(Daten2.Inputs,1);
setlength(Daten2.Outputs,1);
setlength(Daten2.Counters,4);
Daten1.Inputs[0]:=TRUE;
Daten1.Outputs[0]:=TRUE;
Daten1.Counters[0]:=1;
Daten1.Counters[1]:=2;
Daten1.Counters[2]:=3;
Daten1.Counters[3]:=4;
FileWrite(F,Daten1,SizeOf(Daten1));
FileClose(F);
F:=FileOpen ('Daten1.dat',fmOpenRead);
If F=-1 then Halt(1);
FileRead(F,Daten2,SizeOF(Daten2));
FileClose(F);
Writeln(Daten1.Inputs[0]:10,Daten1.Outputs[0]:10);
Writeln(Daten2.Inputs[0]:10,Daten2.Outputs[0]:10);
For i:=0 to 3 do Write(Daten1.Counters[i]:10); Writeln;
For i:=0 to 3 do Write(Daten2.Counters[i]:10); Writeln;
// Readln;
// das hier habe ich nachträglich eingefügt, da ich die dyn. Arrays in Verdacht hatte - ohne Erfolg
setlength(Daten1.Inputs,0);
setlength(Daten1.Outputs,0);
setlength(Daten1.Counters,0);
setlength(Daten2.Inputs,0);
setlength(Daten2.Outputs,0);
setlength(Daten2.Counters,0);
Daten1.Inputs:=nil;
Daten1.Outputs:=nil;
Daten1.Counters:=nil;
Daten2.Inputs:=nil;
Daten2.Outputs:=nil;
Daten2.Counters:=nil;
Writeln('Ende');
end.

Debugger ausschalten brachte nichts. Array mit fester Länge funktioniert, ist aber keine Lösung. Auch die Array-Größe auf null setzen brachte nichts.
Ich verwendete Windows 10 und Laz. 1.8.4 (FPC 3.0.4) bzw. 1.9.0 (FPC 3.1.1).
Hat jemand eine Idee, was ich falsch mache?