Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Maximum Access Violation
Anmeldungsdatum: 23.02.2005 Beiträge: 9 Wohnort: Schwabach
|
Verfasst am: 23.02.2005, 22:08 Titel: Hat QuickBasic einen Bug? |
|
|
|
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 23.02.2005, 22:27 Titel: |
|
|
Oder vielleicht hast du was durcheinander gebracht
Also bei mir unter Win XP ist da nichts passiert
(auch kein Fehler von QB), man konnte nur den Cursor nicht mehr bewegen.
Könnte es sein, dass
1. Da ein Fehler bei den Variablen ist, d.h. dass du
irgendwo vielleicht eine bereits exitsierende Variable genommen hast.
2. Dass du vielleicht ein %, !, $, etc. vergessen hast
3. Dass du den Namen einer Variablen verwechselt hast, obwohl du die
selbe gemeint hast (z.B. Player.Car mit Player.Auto)
Zur Not: Einfach neu programmieren und aussagekräftigere Variablennamen verwenden.
(Das Problem hatte ich auch mal bei einem Spiel, da musste ich die ganze Engine neu programmieren. Am Ende stellte sich heraus, dass ich an einer Stelle nur ein 's' vergessen hatte . War aber ganz nützlich, denn so habe ich das ganze Spiel von Grund auf 'generalüberholt')
jb |
|
Nach oben |
|
 |
Maximum Access Violation
Anmeldungsdatum: 23.02.2005 Beiträge: 9 Wohnort: Schwabach
|
Verfasst am: 25.02.2005, 18:36 Titel: du glaubst nicht was ich schon verändert und probiert habe: |
|
|
ja das is doch gerade der Witz:
Ich hab alle Variablennamen ausgetauscht. Y% als parameter bei elPop() ist ein Element von Position (TYPE), also gewechselt.
Ich habe gestern die Funktion menuSchlange so weit auskommentiert, das nur noch die Schleife (jetzt immitiert mit einem GOTO), die Tastaturabfrage und das problematische IF...THEN stehenbleiben, jetzt ist das ganze sogar im Debug zu beobachten:
Code: |
cx% = 10
cy% = 10
DO
lastKe$ = INKEY$
'(...)
IF elPop(cx%, cy%) = cBack THEN olderX% = cx%: olderY% = cy%
LOOP UNTIL lastKe$ = CHR$(13)
|
Im Debugmodus hab ich in meinem Direktfenster folgendes stehen:
Code: |
DEF SEG = VARSEG(olderY%): Msg$(HEX$(PEEK(VARPTR(olderY%))), 1): DEF SEG
|
dies wird nach jedem Befehl ausgeführt um den Wert der Variablen zu überprüfen. Sobald ich in die SUB elPop() gehe, steht da dann plötzlich nicht mehr A (10) sondern irgendein hoher Wert.
Und du siehst: olderY% bleibt eigentlich unberührt.
In einem Punkt hast du recht: unter XP bleibt (bei der alten Variante siehe Link) nur der Cursor stehen. Ein Fehler von QB tritt eigentlich selten auf
Danke für dein Interesse .
Es würde mir trotzdem viel daran liegen, wenn sich mehrer Leute mit dem Problem befassen. Den Grund eines Bugs in QB4.5 herauszufinden, um diesen dann gezielt umgehen zu können liegt bestimmt im Interesse aller QBasic Programmierenden  |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 25.02.2005, 19:03 Titel: |
|
|
Hallo!
Nur mal so ne Frage, warum verwendest du Code-Zeilen wie
bzw.
Code: |
DO: LOOP UNTIL INKEY$ = ""
|
????
Ich persönlich plädiere weiter für einen Fehler deinerseits , und
empfehle dir, das Programm zur Not noch einmal neu zu schreiben.
Manchmal ist eben der Wurm drin.
Da hilft nichts, runter von der Festplatte und noch mal gaaanz von vorne...
jb |
|
Nach oben |
|
 |
Maximum Access Violation
Anmeldungsdatum: 23.02.2005 Beiträge: 9 Wohnort: Schwabach
|
Verfasst am: 25.02.2005, 20:59 Titel: nöööööööööö |
|
|
wartet natürlich auf den Tastendruck und speichert ihn dann in lastKey$.
Man hätte natürlich auch die 0 weglassen können, aber das is das gleiche. SLEEP 0 wartet nicht 0 Sekunden, sondern macht bei einem Tastendruck weiter.
Code: | DO: LOOP UNTIL INKEY$ = "" | (Tastaturpuffer leeren)
schaut strange aus, hat sich aber wirklich als nütlich erwiesen, wo sonst immer das gepiepse anfängt und die Tasten nicht mehr anständig abgefragt werden ->Tastaturpuffer voll<- sag ich nur...
also, kommentier die IF...THEN Zeile einfach mal aus und starte das Programm ?!
Jetzt hab ich das Zeug endlich mal anständig strukturiert (Elemente sind ja eigentlich schon Klassen wie du in SNK1.BAS sehen kannst) und jetzt erwisch ich zufällig irgend einen komischen Fehler und ich darf wieder alles neu schreiben  |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 25.02.2005, 21:12 Titel: |
|
|
Ach so, den Tastaturpuffer leeren kenne ich nur mit
Code: |
DEF SEG = 0
POKE &H41A, PEEK(&H41C)
DEF SEG
|
(Ist ein bissal schneller)
oder mit
Code: |
DO: LOOP WHILE LEN(INKEY$)
|
Na ja, ich hab mir den Code noch mal angeschaut, und ich finde einfach
keinen Fehler.
Sorry,
jb |
|
Nach oben |
|
 |
Gremlin

Anmeldungsdatum: 12.12.2004 Beiträge: 142 Wohnort: Heinsberg
|
Verfasst am: 26.02.2005, 10:54 Titel: |
|
|
Zitat: |
wartet natürlich auf den Tastendruck und speichert ihn dann in lastKey$.
Man hätte natürlich auch die 0 weglassen können, aber das is das gleiche. SLEEP 0 wartet nicht 0 Sekunden, sondern macht bei einem Tastendruck weiter. |
Also dafür gibts eine eigene Funktion.
Code: | lastKey$ = INPUT$(n) |
wartet auf n Tastendrücke und speichert sie in der Variablen lastKey$.
Die letzte Taste (also eine) wird dann dementsprechend mit
Code: | lastKey = INPUT$(1) |
gespeichert. _________________ Tja, hier konnte ihre Werbung stehen.
Pech gehabt.  |
|
Nach oben |
|
 |
Maximum Access Violation
Anmeldungsdatum: 23.02.2005 Beiträge: 9 Wohnort: Schwabach
|
Verfasst am: 01.03.2005, 21:25 Titel: Zeichenkettenbereich beschädigt |
|
|
ich hab schon wieder was rausgefunden:
Entscheidend für den Fehler ist die Verwendung von Stringvariablen, wobei das LOOP UNTIL nicht beachtet wird.
Jetzt wird mir auch langsam das "Zeichenkettenbereich beschädigt" klar.
 |
|
Nach oben |
|
 |
Quark48

Anmeldungsdatum: 16.10.2004 Beiträge: 559 Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern
|
Verfasst am: 01.03.2005, 21:44 Titel: |
|
|
Hallo!
Ich hab endlich auch mal ne winzige Frage an euch
Früher kam bei mir auch immer "Zeichenkettenbereich beschädigt."
QB hielt an und zeigte mir nur noch diese Meldung. (Bei Fehlern solchen Ausmaßes ist dasnatürlich klar )
Aber ich würd schon gern mal wissen, wann dieser Fehler auftritt - vielleicht wenn der String-Speicher knapp wird?!? _________________ Grüßle, Stefan
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht!
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/ |
|
Nach oben |
|
 |
Stormy

Anmeldungsdatum: 10.09.2004 Beiträge: 567 Wohnort: Sachsen - wo die schönen Frauen wachsen ;)
|
|
Nach oben |
|
 |
Quark48

Anmeldungsdatum: 16.10.2004 Beiträge: 559 Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern
|
Verfasst am: 05.03.2005, 16:39 Titel: |
|
|
Hallo!
Das wär natürlich klasse, wenn M$ die Bugs ausbügeln würde  _________________ Grüßle, Stefan
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht!
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/ |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 05.03.2005, 17:00 Titel: |
|
|
Als ob die sich nohc für QB interessieren würden. Des is für die praktisch totes land, abgestoßen *g*
alles, was die noch verbessern, is VB bzw die damit verwandten sprachen.
Die DOS-Zeiten sind vorbei.
Oder würdest du noch was an nem Programm verbessern, das du vor Jahren geschrieben hast, und von dem du schon lange ne bessere version geschrieben hast?
(nicht dass VB so viel besser wäre als QB, ich find imperative sprachen besser also objektorientierte )
naja.
gibt ja freebasic! _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
|