• Wie kann ich einen unsigned Integer Overflow in C trappen?
    FPE_INTOVFLOW geht irgendwie nicht...
    Oder muss ich da noch was bestimmtes machen?

    Alles ist möglich, die Frage ist nur wer's programmiert!

  • sowas wie einen integer overflow gibts in C nicht, der wrappt dann herum (auf 0 wenns unsigned ist).

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Das heißt es gibt in C keine andere Möglichkeit einen Overflow festzustellen, außer so?

    Code
    unsigned long a, b, c;
    c = a + b;
    if(c < a) Overflow!

    Alles ist möglich, die Frage ist nur wer's programmiert!

  • kannst ja Assmebler-Code in dein c-Programm einbinden mit

    Code
    asm Befehl

    '100 little bugs in the code, 100 bugs in the code. Fix one bug, compile it again: 101 little bugs in the code.
    101 little bugs in the code . . .'
    Continue until 0 Bugs reached...

  • 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 ?!

    Alles ist möglich, die Frage ist nur wer's programmiert!

  • 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...

    Why bother spending time reading up on things? Everybody's an authority, in a free land.

  • Du kannst einen überlauf sehr einfach abfangen indem du als ergebnis eine jeweils größere Variable (zB long long) verwendest.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • 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 ...

    Überzeugungen sind gefährlichere Feinde der Wahrheit als Lügen.
    --
    Friedrich Nietzsche

  • naja, aber inline-assembly ist noch weniger portabel :)

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • 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!

    Alles ist möglich, die Frage ist nur wer's programmiert!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!