![]() |
Integerüberlauf bei LongWord
Hallo,
Bei folgender Zuweisung bekomme ich einen Runtime Error (Integerüberlauf):
Delphi-Quellcode:
Ich bin mir sicher, dass dieser Code bisher funktioniert hat.
procedure TForm1.Button1Click(Sender: TObject);
var w:LongWord; i:Integer; begin w:=3; i:=-w; // <-- Integerüberlauf ShowMessage(IntToStr(w)+' / '+IntToStr(i)); end; Hat jemand eine Idee wo hier der Fehler liegt? Danke, ing |
AW: Integerüberlauf bei LongWord
naja.. da Longword einen gültigen Wertebereich von 0..4294967295 hat ist es eigentlich logisch, dass es bei negativer Zuweisung einen Überlauf gibt.
P.S.: Herzlich willkommen in der DP! :-) |
AW: Integerüberlauf bei LongWord
Hallo :party:
Er steckt in die LongWord-Variable aber keine negativen Werte rein. Bei Dingen wie
Delphi-Quellcode:
wäre das so, aber nicht hier.
w:= -w;
Und ich bekomme hier ehrlich gesagt auch keinen Überlauf. Welche Delphi-Version, welche Plattform? (Windows/Mac/... bzw. 32/64 Bit?) |
AW: Integerüberlauf bei LongWord
Hallo Lemmy,
Zitat:
w ist 3 i ist ein Integerwert i:=-w; sollte also -3 ergeben. wo soll da ein Überlauf stattfinden? i:=-3; funktioniert ja ohne Probleme. Außerdem bin ich mir sicher, dass diese Zuweisung schon länger in meinem Programm drin steht und es bisher noch keine Probleme damit gab. ?? ing |
AW: Integerüberlauf bei LongWord
Zitat:
|
AW: Integerüberlauf bei LongWord
Hallo und Willkommen in der DP !
So weit hast Du ja auch Recht, aber ... nach mehrmaligen Hinsehen habe ich aber auch erst das Minuszeichen gesehen ! i:= - w; Das macht nichts weiter als eine Multiplikation mit -1 und schon bist Du aus dem gewähltenm Wertebereich raus und bekommst einen Überlauffehler. Habe gerade mal ein altes Delphi 7 angeworfen und da steht: Longword = Cardinal (unsigned) Gruß Thomas |
AW: Integerüberlauf bei LongWord
Ein Cast mit
Delphi-Quellcode:
sollte funktionieren.
i := - Integer( w );
|
AW: Integerüberlauf bei LongWord
@Sir Rufo:
Erklärt aber nicht die Ursache. Du bist doch sonst so gründlich ;) Dein Cast würde übrigens trotzdem den Fehler nicht beheben, wenn w einen Inhalt hat (woher auch immer), der zu einem Integer-Überlauf führt. @Ing: Hast du denn mal den Debugger bemüht und nachgesehen, was vor der Zuweisung in den Variablen steht? Hast du vielleicht eine der Variablen nochmal woanders (global oder in TForm1) definiert? |
AW: Integerüberlauf bei LongWord
Zitat:
Zitat:
|
AW: Integerüberlauf bei LongWord
Zitat:
Delphi-Quellcode:
Das dürfte aber nur in bestimmten Fällen kein Problem sein :-)
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject); var w:LongWord; i:Integer; begin w:= High(LongWord); i:=-Integer(w); ShowMessage(IntToStr(w)+' / '+IntToStr(i)); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 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