Registriert seit: 8. Jan 2007
472 Beiträge
|
AW: haben wir schon Ostern ? - wer findet den Fehler ?
21. Okt 2023, 23:04
Du verwendest verschiedene Techniken. Dann musst du so schreiben:
Delphi-Quellcode:
type
TOpCode = (ocLit, ocOpr, ocLod, ocSto, ocCal, ocInt, ocJmp, ocJpc, ocWri);
TInstruction = record
f: TOpCode; // command
l: Byte; // level
a: Integer; // address
end;
PInstruction = ^TInstruction;
TInstructions = array of PInstruction;
var
ins: PInstruction;
insArr: TInstructions;
begin
SetLength(insArr, 2);
GetMem(ins, SizeOf(TInstruction));
insArr[0] := ins;
ins.f := ocLit;
GetMem(ins, SizeOf(TInstruction));
insArr[1] := ins;
ins.f := ocJmp;
for var i: Integer := Low(insArr) to High(insArr) do
ShowMessage(Format('OpCode: %s', [System.TypInfo.GetEnumName(TypeInfo(TOpCode), Ord(insArr[i].f))]));
for var i: Integer := Length(insArr) - 1 downto 0 do
FreeMem(insArr[i]);
Alternativ so:
Delphi-Quellcode:
var
ins: PInstruction;
insArr: TInstructions;
insBufferSize: Integer;
begin
SetLength(insArr, 2);
insBufferSize := SizeOf(TInstruction) * Length(insArr);
GetMem(ins, insBufferSize);
insArr[0] := ins;
ins.f := ocLit;
Inc(ins);
insArr[1] := ins;
ins.f := ocJmp;
for var i: Integer := Low(insArr) to High(insArr) do
ShowMessage(Format('OpCode: %s', [System.TypInfo.GetEnumName(TypeInfo(TOpCode), Ord(insArr[i].f))]));
FreeMem(insArr[0], insBufferSize);
Oder so wie in meinem letzten Post, aber du kannst es nicht beliebig mischen. Die Variante aus dem ersten Post wäre mein Favorit.
Bis bald...
Thomas
Geändert von mytbo (21. Okt 2023 um 23:10 Uhr)
Grund: Tippfehler korrigiert
|
|
Zitat
|