1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Overflow trap?

  • Deep Thought
  • 12. Dezember 2002 um 17:44
  • Unerledigt
Hallo zusammen,

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!
  • Deep Thought
    Punkte
    175
    Beiträge
    27
    • 12. Dezember 2002 um 17:44
    • #1

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

  • hal
    Punkte
    11.122
    Beiträge
    2.208
    • 12. Dezember 2002 um 22:06
    • #2

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

  • Deep Thought
    Punkte
    175
    Beiträge
    27
    • 13. Dezember 2002 um 08:45
    • #3

    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!
  • Irrlicht
    Punkte
    421
    Beiträge
    82
    • 13. Dezember 2002 um 09:11
    • #4

    jo

  • Deep Thought
    Punkte
    175
    Beiträge
    27
    • 13. Dezember 2002 um 09:19
    • #5

    OK. Danke!
    Assembler rulez!!

  • Soulmerge
    Punkte
    405
    Beiträge
    71
    • 13. Dezember 2002 um 13:54
    • #6

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

    Code
    asm Befehl
  • Deep Thought
    Punkte
    175
    Beiträge
    27
    • 13. Dezember 2002 um 15:40
    • #7

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

  • jeuneS2
    Punkte
    1.227
    Beiträge
    238
    • 13. Dezember 2002 um 17:46
    • #8

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

  • MaxAuthority
    Punkte
    3.165
    Beiträge
    626
    • 13. Dezember 2002 um 23:39
    • #9

    na endlich gibts noch ein paar informatiker die sich mit assembler auskennen...


    ...dachte schon, hier wären nur noch high-level typen... :)

  • dose
    Punkte
    1.679
    Beiträge
    335
    • 14. Dezember 2002 um 00:50
    • #10

    Lang, lang is her...und die AT&T Syntax is außer grindig nur grindig *speib*

  • hal
    Punkte
    11.122
    Beiträge
    2.208
    • 14. Dezember 2002 um 21:14
    • #11

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

  • root@axp1
    Punkte
    125
    Beiträge
    25
    • 15. Dezember 2002 um 00:49
    • #12

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

  • hal
    Punkte
    11.122
    Beiträge
    2.208
    • 15. Dezember 2002 um 17:37
    • #13

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

  • Deep Thought
    Punkte
    175
    Beiträge
    27
    • 15. Dezember 2002 um 23:44
    • #14

    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.

  1. Datenschutzerklärung
  2. Impressum