Wie kann ich einen unsigned Integer Overflow in C trappen?
FPE_INTOVFLOW geht irgendwie nicht...
Oder muss ich da noch was bestimmtes machen?
Overflow trap?
-
Deep Thought -
12. Dezember 2002 um 17:44 -
Unerledigt
das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)
Vielen Dank für die Treue und das Verständnis!
-
-
sowas wie einen integer overflow gibts in C nicht, der wrappt dann herum (auf 0 wenns unsigned ist).
-
-
-
OK. Danke!
Assembler rulez!! -
-
Das ist aber nicht C Standard.
Deshalb geht das bei meiner Borland C Version wunderbar.
Bei VC mit __asm,.
Aber ich weiß nicht, wie das mit gcc funktioniert.
asm("mov ax,1"); erzeugt noch einen Fehler:
- too many memory references for mov ?! -
das liegt denk ich daran, dass gcc bzw. gas (der Assembler von gcc) die AT&T Syntax verwendet; "mov ax, 1" wird dann zu "mov 1, %ax"... eine Möglichkeit bei neueren Versionen von gas is das Makro "_intel_syntax" oder so, dann funkt die Masm Syntax (nicht aber die Nasm Syntax)... oder aber man lernt die imho leicht verbaute AT&T Syntax...
-
na endlich gibts noch ein paar informatiker die sich mit assembler auskennen...
...dachte schon, hier wären nur noch high-level typen...
-
Lang, lang is her...und die AT&T Syntax is außer grindig nur grindig *speib*
-
Du kannst einen überlauf sehr einfach abfangen indem du als ergebnis eine jeweils größere Variable (zB long long) verwendest.
-
auf das kannst du dich nicht verlassen ... long long ist nicht unbedingt grösser als long, so wie long nicht unbedingt grösser als int ist ...
-
naja, aber inline-assembly ist noch weniger portabel
-
Das Problem mit größeren Variablen ist die Aufgabenstellung, die sagt: Realisieren sie +,-,*,: mit beliebig großen Zahlen. Und das heißt auch weit über den Bitbreiten, die eine normale Programmiersprache zur Verfügung stellt.
Man könnte natürlich BCD verwenden, aber das ist mir zu langsam!
Ich hab' also die if Methode zu Erkennung eines Overflows angewandt und es funktioniert wunderbar. Fertiges Programm im Anhang, falls es wen interessiert.EDIT: ganz so fertig ist es wohl nicht, 1 Bug hab ich schon entdeckt!
-
Maximilian Rupp
27. Dezember 2024 um 12:08 Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.