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?
-
-
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!
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!