AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein haben wir schon Ostern ? - wer findet den Fehler ?
Thema durchsuchen
Ansicht
Themen-Optionen

haben wir schon Ostern ? - wer findet den Fehler ?

Ein Thema von paule32.jk · begonnen am 21. Okt 2023 · letzter Beitrag vom 1. Nov 2023
Antwort Antwort
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: haben wir schon Ostern ? - wer findet den Fehler ?

  Alt 21. Okt 2023, 18:04
@paule: Bitte versuche, Deinen Themen aussagekräftige Titel zu geben. Und eingrenzen musst du den Fehler schon selbst – es ist nicht Sinn und Zweck dieses Forums, einfach einen Haufen Code kommentarlos rein zu werfen mit der Bitte, einen Fehler zu finden. Im Kern wirst du dich schon selbst damit befassen müssen.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
371 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: haben wir schon Ostern ? - wer findet den Fehler ?

  Alt 21. Okt 2023, 18:29
@Daniel, okay. Nächste mal will ich versuchen, besser zu werden.

Aber wie schon geschrieben:
- das auslesen der Größe ist kein Problem
- habe nun "packed record" und die Datei test.bin ist nur noch 42 Byte groß
- im Designer wie auch zur Laufzeit bekomme ich eine AV, und der Debugger Stack im Designer zeigt mir nicht die richtigen Werte für:

var op: TInstruction;
op := Instruction[0].f;

an.
ich bekomme dann eine AV, und der Debugger springt dann an.
Und dort ist dann auch die Stelle, wo ich festsitze - wie ich schon schrieb, bei:

var op : TOpCode;
op := Instruction[p].f;

@kas ob:
The file is created by the source code, you can see it in this Post.
I called it 'test.source.bin' at:
LexScanner('test.source.pas');

- test.source.pas is the script source file
- in source code, i change the .pas Extension with .bin:
s := ChangeFileExt(filename,'.bin');

where "filename" is: 'test.source.pas'.
Frag doch einfach
Alles was nicht programmiert werden kann, wird gelötet

Geändert von paule32.jk (21. Okt 2023 um 18:33 Uhr)
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
483 Beiträge
 
#3

AW: haben wir schon Ostern ? - wer findet den Fehler ?

  Alt 21. Okt 2023, 20:00
ich bekomme dann eine AV, und der Debugger springt dann an.
Und dort ist dann auch die Stelle, wo ich festsitze - wie ich schon schrieb, bei:

var op : TOpCode;
op := Instruction[p].f;
Lese bitte den Umgang mit dynamischen Arrays in der Hilfe nach:
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 TInstruction;

var
  ins: PInstruction;
  insArr: TInstructions;
begin
  SetLength(insArr, 2);
  insArr[0].f := ocLit;
  insArr[1].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 := 0 to Length(insArr) - 1 do
  begin
    ins := @insArr[i];
    ShowMessage(Format('OpCode: %s', [System.TypInfo.GetEnumName(TypeInfo(TOpCode), Ord(ins.f))]));
  end;
Bis bald...
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
371 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: haben wir schon Ostern ? - wer findet den Fehler ?

  Alt 21. Okt 2023, 21:26
@mytbo: wenn ich mich an Deinen Code halte:


showmessage('size 2: ' + inttostr(sizeof(instructions))); // hier erhalte ich: 4
SetLength(insArr, 2);
insArr[0].f := Lit;
insArr[1].f := Jmp;
ins := @Instructions[0]; // hier knallts

...
var
FSize: Integer;
FileStream: TFileStream;

FileStream := TFileStream.Create('test.bin', fmOpenRead);
SetLength(Instructions,FSize div sizeof(TInstruction));
FileStream.Read(Instructions, FileStream.Size); // length: 24
Frag doch einfach
Alles was nicht programmiert werden kann, wird gelötet
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
483 Beiträge
 
#5

AW: haben wir schon Ostern ? - wer findet den Fehler ?

  Alt 21. Okt 2023, 22: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 22:10 Uhr) Grund: Tippfehler korrigiert
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.654 Beiträge
 
Delphi 12 Athens
 
#6

AW: haben wir schon Ostern ? - wer findet den Fehler ?

  Alt 21. Okt 2023, 22:54
Nur mal so.
Was würde ChatGPT dazu sagen?
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.562 Beiträge
 
Delphi 12 Athens
 
#7

AW: haben wir schon Ostern ? - wer findet den Fehler ?

  Alt 22. Okt 2023, 10:30
Warum immer wieder neue Threads,
https://www.delphipraxis.net/213934-...ppt-nicht.html
https://www.delphipraxis.net/213935-...-new-post.html
https://www.delphipraxis.net/213937-...-new-post.html
anstatt das eigentliche Problem endlich zu lösen?
https://www.delphipraxis.net/213929-...ml#post1528456
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz