Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   unerwatete Ergibnisse in Variablen (https://www.delphipraxis.net/207867-unerwatete-ergibnisse-variablen.html)

juelin 10. Mai 2021 18:42

unerwatete Ergibnisse in Variablen
 
Hallo Forum,
ich habe Delphi 10.3.3 und Windows 10.

Meine Procedure xyz bringt unerwartete Ergebnisse:
Die procedure rufe ich zuerst in Form1 auf. Das Ergibnis stimmt. (hw2=255)
Dananch rufe ich die procedure in Form2 auf. Auch hier stimmt das Erginis. (hw2=255)
Dann gehe ich wieder zurück in Form1 und rufe die procedure auf. Das Ergibnis stimmt nicht mehr. (hw2=-16129)
ha.dbyte1 ist in allen Fällen immer 255.

Delphi-Quellcode:
type tdb1bytearray = record
  dbyte1: Byte;
end;

procedure Form1.xyz
  var ha: tdb1bytearray;
  var hq2: ^SmallInt;
  var hw2: SmallInt;
  var h1: integer;
begin

      h1:=FileRead(h2, ha, 1);
      h1:=Ord(ha.dbyte1);
      if h1 > 127 then
      begin
        hq2:=@ha;
        hw2:=hq2^;
        if hw2 <> 255 then fdsreturn:=36;
      end;

end;
Hat jemand eine Idee?
Danke und Gruß
Jürgen

TurboMagic 10. Mai 2021 19:20

AW: unerwatete Ergibnisse in Variablen
 
Ha ist 1 Byte groß und hat ein Zeiger auf 2 Byte...

himitsu 10. Mai 2021 19:26

AW: unerwatete Ergibnisse in Variablen
 
Was ist h2?

Was ist fdsreturn
und warum initislaisiert das niemand?

Was passiert, wenn es kein Byte mehr in der Datei gibt?
niemand Werte das erste h1 aus. (warum hört niemand auf den Debugger? )


Und wer kommt aus die saublöde Idee einen 1-Byte-Typ auf einen 2-Byte-Typen zu casten,
ohne sich zu fragen, wo um himmels Willen das nichtvorhandne Byte her kommt? (was somit undefiniert/zufällig ist)
Für 255 ist dieser Cast eh total nutzlos.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz