Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

ubyte variable führt zu sub-wiederholungen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
oldcoolman



Anmeldungsdatum: 05.06.2007
Beiträge: 11

BeitragVerfasst am: 09.12.2007, 11:42    Titel: ubyte variable führt zu sub-wiederholungen Antworten mit Zitat

Hallo,
folgendes mit fb 0.18.3 -lang fb -exx compiliert führt zu endlosen Ausführungen:
Code:

declare sub subtest()
subtest
end

sub subtest
dim x as ubyte
for x= 0 to 255
    print x;" ";
next   
end sub   


mit integer dimensioniert geht es tadellos.

Gruß
Andi
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Flo
aka kleiner_hacker


Anmeldungsdatum: 23.06.2006
Beiträge: 1210

BeitragVerfasst am: 09.12.2007, 12:06    Titel: Antworten mit Zitat

lol?
wenn man for i=0 to 256+x macht, zähllt er von null bis x und hörtr dann auf happy
komisch
liegt jedenfalls weder an -exx noch an 0.18, bei 0.17 ists auch so
_________________
MFG
Flo

Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.

zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4700
Wohnort: ~/

BeitragVerfasst am: 09.12.2007, 12:31    Titel: Antworten mit Zitat

Das mit der Endlosausführung könnte ich mir so erklären, dass er erst x von 255 auf 256 erhöht und dann schaut, ob er über dem TO-Wert 255 liegt - tut er aber nicht, weil 256 ja als 0 gespeichert wird.

Zitat:
wenn man for i=0 to 256+x macht, zähllt er von null bis x und hörtr dann auf happy

Ist eigentlich genau das, was ich von ihm erwarte. Die Zahlen werden ja als UBYTE behandelt.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 09.12.2007, 12:42    Titel: Antworten mit Zitat

Hallo

Ich kenne mich mit FB zwar nicht aus, aber in QB ist der Wert der Zählvariablen nach einer FOR...NEXT Schleife ja auch nicht der Endwert, sondern der nächstgrösste Zählschritt danach. Die Schleife läuft offenbar nicht so lange, bis dieser Endwert erreicht ist, sondern wird verlassen, wenn die Zählvariable grösser ist als der Endwert. Macht ja auch Sinn, die Zählvariable könnte schließlich in der Schleife verändert werden. Bei QB führt z.B.

Code:
DIM x AS INTEGER
FOR x = 0 TO 32767
NEXT


zu einem Überlauf. Beim ubyte gibt es wohl keinen Überlauf, vielleicht werden einfach nur acht Bit eines an sich grösseren Speicherbereichs benutzt oder so. Nach 255 springt x also vielleicht direkt wieder auf 0 zurück und die Schleife wird nicht verlassen, weil nie ein Wert grösser als 255 erreicht werden kann. Ist aber nur Spekulation.

Gruß
McCoy

EDIT: Mein 1000. Beitrag!
_________________
Elektronik und QB? www.skilltronics.de !


Zuletzt bearbeitet von Skilltronic am 09.12.2007, 12:44, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
oldcoolman



Anmeldungsdatum: 05.06.2007
Beiträge: 11

BeitragVerfasst am: 09.12.2007, 12:42    Titel: ubyte in schleife Antworten mit Zitat

stimmt. und 256+x wird intern als integer behandelt,denk ich wärend x als ubyte behandelt wird.

Danke für die Antwort
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 09.12.2007, 12:44    Titel: Antworten mit Zitat

Hi, das ist eine verrückte Sache durchgeknallt
Ich habe mir das mal als Assemblerquelltext angesehen:
Code:
movzx ebx, byte ptr [ebp-4] 'lade x als Byte, fülle mit 0 auf
cmp ebx, 255 'vergleiche
jbe .Lt_0008 'Sprung, wenn vorzeichenlos kleiner oder gleich

d.h. x ist immer ein Wert von 0 - 255 also immer kleiner oder gleich, also wird immer gesprungen.
EDIT/
genau wie nemored und Skilltronic es beschreiben
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Bimi



Anmeldungsdatum: 03.12.2007
Beiträge: 66

BeitragVerfasst am: 10.12.2007, 13:44    Titel: Antworten mit Zitat

volta hat Folgendes geschrieben:
Hi, das ist eine verrückte Sache durchgeknallt
Ich habe mir das mal als Assemblerquelltext angesehen:
Code:
movzx ebx, byte ptr [ebp-4] 'lade x als Byte, fülle mit 0 auf
cmp ebx, 255 'vergleiche
jbe .Lt_0008 'Sprung, wenn vorzeichenlos kleiner oder gleich

d.h. x ist immer ein Wert von 0 - 255 also immer kleiner oder gleich, also wird immer gesprungen.
EDIT/
genau wie nemored und Skilltronic es beschreiben


Ist keine verrückte Sache, ist ganz normal.

Wenn ich eine unsigned habe und MINVAL und MAXVAL als Bedingungen setze, dann ist JEDER durch diesen Datentyp darstellbare Wert kleiner oder gleich MAXVAL, da die Schleife den gesamten Wertebereich umfaßt.
_________________
Rechtbehelf:

Rechschreibverfehlungen, Vergehen an der Deutschen Sprache sowie Stabwechselverbuchselungen unterliegen dem Urheberrecht, sind voll beabsichtigt und fördern das aufmerksame Lesen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Flo
aka kleiner_hacker


Anmeldungsdatum: 23.06.2006
Beiträge: 1210

BeitragVerfasst am: 10.12.2007, 17:23    Titel: Antworten mit Zitat

mhm, was könnte man nu damit anfangen hrhr?
wenn die variable ganz am ende vom zugeteilten speicher liegt
also
Code:

XXXXXXXX|YYYYY
        ^hier ist der speicher unseres proggis zuende

und fb das nicht abfängt... könnte man dann in fremden speicher rumpfuschen xD?
_________________
MFG
Flo

Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.

zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 10.12.2007, 20:38    Titel: Antworten mit Zitat

Gar nix, da du hier nicht mit Pointern arbeitest.
Ein Buffer-Overflow ist was anderes, als ein Overflow bei Werten.
Bei einem Buffer-Overflow wird über den eigtl. Speicher hinausgeschrieben, bei einem normalen Werte-Overflow geht der Wert einer Zahl "nur" über den gültigen/darstellbaren Bereich des Datentyps hinaus, wird deshalb auf den gegenteiligen Wert (von 255 auf 0 z.B.) gesetzt.
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 10.12.2007, 21:47    Titel: Antworten mit Zitat

So zählt er auch endlos mit den Augen rollen
Code:
SUB subtest
DIM x AS BYTE
FOR x= 127 TO 127
    print " ";x;
    sleep 1
    if multikey(&h01) then exit for
NEXT   
END SUB   

subtest
END


Vermutlich darf einfach MAXVAL nicht der selbe sein als der des Datentyps.
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 10.12.2007, 22:03    Titel: Antworten mit Zitat

Es ist kein Fehler von FreeBASIC, wenn der Programmierer Brain.Exe nicht installiert hat..
..und seine Berechtigungen nicht ausreichen, um Think.Exe zu aktivieren.
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz