AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Integerüberlauf bei LongWord

Ein Thema von ing · begonnen am 8. Jun 2016 · letzter Beitrag vom 8. Jun 2016
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 08:58
Er steckt in die LongWord-Variable aber keine negativen Werte rein. Bei Dingen wie w:= -w; wäre das so, aber nicht hier.
das stimmt, aber er multipliziert einen Longword mit -1 und was ist das Ergebnis? ein Longword.
Nein. Ich glaube du verwechselt da was. Es gibt da Phänomene bei der Multiplikation ... Aber das hat hiermit nichts zu tun.

schalte mal in den Compileroptionen die Überlaufprüfung ein.
War auch mein erster Verdacht. Habe es getestet und es hat ohne Fehler funktioniert.
Peter
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.273 Beiträge
 
Delphi 10.4 Sydney
 
#12

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 09:01
Hallo,
ich denke, der Hinweis mit der Überlaufprüfung hilft hier.
Wenn im alten Programm keine Fehlermeldung kam,
war dort vielleicht die Prüfung ausgeschaltet?


Heiko
Heiko
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.379 Beiträge
 
Delphi 10.3 Rio
 
#13

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 09:43
schalte mal in den Compileroptionen die Überlaufprüfung ein.
War auch mein erster Verdacht. Habe es getestet und es hat ohne Fehler funktioniert.
Delphi 5 oder Delphi 7 verwendet? In neueren Delphis (habe hier gerade XE4) kommt kein Überlaufsfehler mehr....
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 09:53
@Lemmy:
Da habe ich gepennt. Habe natürlich mit XE2 getestet. Was Anderes habe ich hier nicht zur Verfügung.
Peter
  Mit Zitat antworten Zitat
ing

Registriert seit: 17. Jun 2005
Ort: Ingolstadt
7 Beiträge
 
#15

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 10:20
Hallo Lemmy,
Ich habe jetzt mal die Bereichsprüfung und die Überlaufprüfung ausgeschaltet mit {$R-,Q-}
Der Fehler tritt immer noch auf.

Außerdem:
In der Graphics.pas steht folgender Code:
Delphi-Quellcode:
procedure TBitmap.ReadDIB(Stream: TStream; ImageSize: LongWord);
...
RLEStream.Seek(-ImageSize, soFromEnd);
....
Auch hier mommt seit Kurzem der Runtime-Error.
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.379 Beiträge
 
Delphi 10.3 Rio
 
#16

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 11:03
bei mir in Delphi 7 steht da:

Delphi-Quellcode:
          { Cast ImageSize (long word) to integer to avoid integer overflow when negating. }
          RLEStream.Seek(-Integer(ImageSize), soFromEnd);
Insofern wird sich ggf. das Compilerverhalten an der Stelle in den neuen Delphis inzwischen verändert haben....


Zitat:
Auch hier mommt seit Kurzem der Runtime-Error.
schau mal in den Projekteigenschaften nach, ob da die Bereichs- und Überlaufprüfung eingeschaltet ist und schalte die dort aus...
  Mit Zitat antworten Zitat
ing

Registriert seit: 17. Jun 2005
Ort: Ingolstadt
7 Beiträge
 
#17

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 11:50
Bereichs- und Überlaufprüfung sind sowohl in den Project-Einstellungen
wie auch im Code ( mit {$R-,Q-} ) ausgeschaltet.
Trotzdem tritt der Fehler auf
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.379 Beiträge
 
Delphi 10.3 Rio
 
#18

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 12:21
war es schon immer ausgeschaltet oder hast Du es ausgeschaltet? Und hast Du das Projekt schon mal neu erstellt / vollständig compiliert? Hast Du die dcus schon mal gelöscht (also die dcus der Projektsourcen und nicht von irgend welchen Komponenten von denen du nur die dcus hast)?
  Mit Zitat antworten Zitat
ing

Registriert seit: 17. Jun 2005
Ort: Ingolstadt
7 Beiträge
 
#19

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 14:05
war es schon immer ausgeschaltet oder hast Du es ausgeschaltet?
Ursprünglich war es eingeschaltet. Ich habe es dann probehalber mal ausgeschaltet.

Nachdem ich nun ein paar Mal mit den Optionen "Bereichsprüfung" und "Overflow checking" herumgespielt habe scheint jetzt wieder alles zu funktionieren:

Wenn die Optionen eingeschaltet sind, kommt eine Fehlermeldung.
Wenn die Optionen ausgeschaltet sind, läuft alles ohne Fehler durch.

Warum ich vorher die Probleme hatte kann ich also nicht mehr nachvollziehen.
Aber Danke ann alle, die mir bei der fehlersuche geholfen haben.

Ing
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Integerüberlauf bei LongWord

  Alt 8. Jun 2016, 16:05
Delphi rechnet immer erst mit dem QuellTyp weiter, bzw. mit dem kleinsten "gemeinsamen" Typ, der bei der jeweiligen Teiloperation nötig ist.

LongWord > Negation Unäre Operation > LongWord (und das kann nicht negativ sein) > Zuweisung > Integer/LongInt (da Zieltyp = Integer)

Delphi-Quellcode:
i := -Integer(W); // geht nur, wenn W < 2 Milliarden (maximal 31 Bit genutzt)

i := -Int64(W); // falls an "richtig" rechnen muß

// oder du schaltest die Bereichsprüfung ab, bzw. bzw gezielt dort an, wo sie auch nötig ist
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   

 

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 11:42 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