Autor Beitrag
Peter18
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 465
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Sa 10.11.18 11:15 
Ein freundliches Hallo an alle,

und wieder habe ich ein Problem mit Lazarus. In einer Routine bekomme ich einen Überlauf, der anscheinend bei Delphi4 und Berlin nichts ausmacht aber bei Lazarus gemeldet wird. Ich habe die Konfiguration geprüft, aber nichts gefunden. Na ja, Lazarus ist für mich neu. Fünf mal draufgeguckt und immer noch nicht gesehen. Viellleicht hat jemand eine Brille für mich, damit ich das Problem nicht mehr übersehe.

Die Variablen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
  a, b, c, d, t  : Cardinal                ;
  k              : Array[0..63of Cardinal;
  w              : Array[0..15of Cardinal;
  f, g           : Cardinal                ;
  x              : Cardinal                ;


Die Formel "a + f + k[j]" habe ich zerlegt, um die Stelle zu finden:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
x := a                  ;
x := x + f              ;
x := x + k[j]           ;
x := x + w[g]           ;
x := a + f + k[j] + w[g];


Die Werte:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
A    = 1732584193
f    = 2562383102
k[j] = 3614090360
w[g] = 6422583


Beim Addieren von "k[j]" (Zeile 3) kommt es zum Überlauf und zur Fehlermeldung. Die gleiche Routine liefert bei Delphi4 und Berlin keinen Fehler. Irgendwo habe ich anscheinend eine Einstellung geändert, aber ich finde sie nicht wieder. Hat jemnd einen Tipp wo ich suchen muß?

Grüße von der bedeckten Nordsee

Peter
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1193
Erhaltene Danke: 100

Win7
DXE2 Prof, Lazarus
BeitragVerfasst: Sa 10.11.18 15:05 
Hallo,

ich hätte jetzt spontan auf die Überlaufprüfung wie bei Delphi getippt. Aber zumindest bei mir ist das in Lazarus auch aus.
Allerdings wäre der genaue Wortlaut der Meldung mal interessant. Also ob es ein Integer Überlauf ist oder ein Stack Überlauf.

_________________
Solange keine Zeile Code geschrieben ist, läuft ein Programm immer fehlerfrei.
Ich teste nicht, weil ich Angst habe Fehler zu finden.
Gammatester
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 328
Erhaltene Danke: 101



BeitragVerfasst: Sa 10.11.18 15:23 
Du hast Overflow-Checks eingeschaltet. Global für Dein Projekt kannst Du das ändern in den Projektoptionen / Debugging / Checks and assertion.

Allerings ist es sinnvoll, diese bei der Entwicklung einzuschalten. Wenn Du es unbedingt brauchst, kannst Du es auch lokal ausschalten.

ausblenden Delphi-Quelltext
1:
2:
{$OVERFLOWCHECKS OFF} 
x := a + f + k[j] + w[g];

Allerdings ist das Ergebnis dann eigentlich a + f + k[j] + w[g] modulo 2^32, d.h. heißt es ist falsch für Integer-Rechnung, es gibt das wieder was mit 32-Bit-Registern gerechnet wird:
1732584193 + 2562383102 + 3614090360 = 7909057655

Dein Programm rechnet
1732584193 + 2562383102 + 3614090360 = 3614090359
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 465
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Sa 10.11.18 16:15 
Hallo Stefan, hallo Gammatester,

Dank euch für die Antworten und die Brille. Der Knick in der Optik ist weg.

Ich habe mehrmals an der Stelle nachgesehen und es nicht gesehen. Die Fehlermeldung enthält außer dem, was ich geschrieben habe nur noch den Pfad und die Zeilennummer.

Gammatester hat recht, Überprüfen/Ändern liefert 3614090359 aber das Programm liefert eine Exception. Mit"{$OVERFLOWCHECKS OFF}" und on läuft das ganze. Und offensichtlich war es vom Autor auch so gedacht, denn damit wird ein Password für die Fritzbox verschlüsselt. Es funktioniert.

Grüße von der Nordsee

Peter