Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   ShortInt-Zuweisung schlägt fehl? (https://www.delphipraxis.net/196085-shortint-zuweisung-schlaegt-fehl.html)

günni0 22. Apr 2018 13:58

ShortInt-Zuweisung schlägt fehl?
 
In meinem Programm gibt es eine ShortInt-Variable der ich entweder den Wert 145 oder 117.
Wenn ich 117 setze, hat die Variable komischerweise den Inhalt -111.

Nichts wird in einem exotischen Thread gesetzt oder sowas. Alles nur in einem Button im MainThread.

Was kann das sein?
Wenn ich die Variable auf Integer abändere ist das Problem weg.

Zacherl 22. Apr 2018 14:04

AW: ShortInt-Zuweisung schlägt fehl?
 
Du meinst sicher bei 145? Das ist nicht weiter verwunderlich, da der Wertebereich von
Delphi-Quellcode:
ShortInt
von -128..127 geht. Da kommt es zu einem klassischen Overflow. Wenn du keine negativen Werte brauchst, kannst du einfach
Delphi-Quellcode:
Byte
bzw
Delphi-Quellcode:
UInt8
verwenden.

günni0 22. Apr 2018 14:05

AW: ShortInt-Zuweisung schlägt fehl?
 
Oh man tut mir leid!
Ich hab eben schnell bei Gogle gesucht, habe irgendwas mit 32767 gesehen und dachte daran liegts nicht.

Ok Dummheit wird bestraft. Danke!

Zacherl 22. Apr 2018 14:08

AW: ShortInt-Zuweisung schlägt fehl?
 
Zitat:

Zitat von günni0 (Beitrag 1400143)
Ich hab eben schnell bei Gogle gesucht, habe irgendwas mit 32767 gesehen und dachte daran liegts nicht.

Das ist
Delphi-Quellcode:
SmallInt
(ja, ich bin auch kein Fan der Delphi Bezeichner für Integer-Typen). Ich verwende meistens die (neuen) Aliase wie
Delphi-Quellcode:
Int16
,
Delphi-Quellcode:
UInt32
, etc., da man hier auf den ersten Blick sieht, wie viele Bits beinhaltet sind und ob signed/unsigned.

himitsu 22. Apr 2018 14:09

AW: ShortInt-Zuweisung schlägt fehl?
 
Zitat:

Was kann das sein?
Der Fehler sitzt vor dem Monitor.

* Erstmal tritt das Problem nicht bei 117 sondern bei 145 auf
* dann nutzt du nicht den Debugger, denn sonst würdest du sehen, dass es dort nach der Zuweisung so ist
* dann hast du nicht die Bereichsprüfung aktiviert, als dir das Problem auffiel, denn sonst wüstet du auch warum
* und du hast nicht die OH gelesen, denn sonst wäre dir aufgefallen, dass 145 da irgendwie nicht rein passen kann :zwinker:

günni0 22. Apr 2018 14:10

AW: ShortInt-Zuweisung schlägt fehl?
 
Zitat:

* dann hast du nicht die Bereichsprüfung aktiviert, als dir das Problem auffiel, denn sonst wüstet du auch warum
Doch, habe ich. Aber ich nutze eine eigene IfThen-Funktion, um massig Zeilen und if-else-Konstrukte zu sparen :P
Bei einer eigenen IfThen-Funktion greift die Bereichsprüfung nicht.

Zacherl 22. Apr 2018 14:12

AW: ShortInt-Zuweisung schlägt fehl?
 
Zitat:

Zitat von günni0 (Beitrag 1400147)
Zitat:

* dann hast du nicht die Bereichsprüfung aktiviert, als dir das Problem auffiel, denn sonst wüstet du auch warum
Doch, habe ich. Aber ich nutze eine eigene IfThen-Funktion, um massig Zeilen und if-else-Konstrukte zu sparen :P
Bei einer eigenen IfThen-Funktion greift die Bereichsprüfung nicht.

Die Bereichsprüfung ist eigentlich ein Runtime-Check, welcher vom Compiler automatisch (transparent im Hintergrund) generiert wird und sollte komplett unabhängig vom Code sein. Höchstens durch harte Casts kannst du das umgehen. Ich glaube ihr sprecht von zwei verschiedenen Dingen.

günni0 22. Apr 2018 14:23

AW: ShortInt-Zuweisung schlägt fehl?
 
Ist ja auch egal. Das Problem wurde gelöst und mehr interessiert auch nicht.

mkinzler 22. Apr 2018 14:26

AW: ShortInt-Zuweisung schlägt fehl?
 
Zuviel Wissen verwirrt auch nur ...

günni0 22. Apr 2018 14:27

AW: ShortInt-Zuweisung schlägt fehl?
 
Recht unfreundlich muss ich sagen, wenn ein Moderator sich rausnehmen darf so etwas beizutragen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:14 Uhr.
Seite 1 von 2  1 2      

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