Exception_Access_Violation - Error Wondows?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

CO2

ehemals "SirMO"

Betreff: Exception_Access_Violation - Error Wondows?

BeitragSa, Aug 21, 2010 14:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
Ich hab mich durch die Tutorials gearbeitet und nun mal ein kleines projekt gestartet um zu sehen ob ich das wirklich kann. Wenn ich das Ausführen will, dann kommt der Fehler "Exception_Access_Violation", ich schick euch mal den Code:
Code: [AUSKLAPPEN]
Strict 'Strict-Mode
Graphics 800, 600, 32, 1 'Graphiken: 800 * 600 p
Global gear:String = "N" 'momentaner Gang: Neutral
Global game:Int = 1
Global FPS:ttimer = CreateTimer(59) '59 Frames per Second

'- - - - - - - - - HAUPTSCHLEIFE - - - - - - - - - -
Repeat
WaitTimer(FPS)

Print "Gang: " + gear + "" 'momentanen Gang ausgeben

If KeyDown(57) 'Wenn die Leertaste gedrückt (Kupplung) wird, und
If KeyHit(79) 'Numpad 1 gedrückt wird, dann
gear = "1" 'ist der Gang der 1.
ElseIf KeyHit(80) 'usw.
gear = "2"
ElseIf KeyHit(81)
gear = "3"
ElseIf KeyHit(75)
gear = "4"
ElseIf KeyHit(76)
gear = "5"
ElseIf KeyHit(77)
gear = "6"
ElseIf KeyHit(82)
gear = "N"
ElseIf KeyHit(74)
gear = "R"
Else 'wenn eine andere Taste gedrückt wird, dann
gear = gear 'bleibt der gear, was er ist
EndIf
Else 'wenn die leertaste nicht gedrückt wird, und
If KeyHit(79) 'Numpad 1 gedrückt wird, dann
gear = "1" 'ist der gang zwar der 1., aber
Print "Autsch, das Getriebe!" 'es wird auch das hier ausgegeben
ElseIf KeyHit(80) 'usw.
gear = "2"
Print "Autsch, das Getriebe!"
ElseIf KeyHit(81)
gear = "3"
Print "Autsch, das Getriebe!"
ElseIf KeyHit(75)
gear = "4"
Print "Autsch, das Getriebe!"
ElseIf KeyHit(76)
gear = "5"
Print "Autsch, das Getriebe!"
ElseIf KeyHit(77)
gear = "6"
Print "Autsch, das Getriebe!"
ElseIf KeyHit(82)
gear = "N"
Print "Autsch, das Getriebe!"
ElseIf KeyHit(74)
gear = "R"
Print "Autsch, das Getriebe!"
Else
gear = gear
EndIf
EndIf

If KeyHit(1) 'wenn Escape gedrückt wird, dann wird game zu 0 und
game = 0
EndIf

Flip
FlushKeys()
FlushMouse()
Until game = 0 'das spiel wird beendet
End
'- - - - - - - - - - HAUPTSCHLEIFE ENDE - - - - - - - - - -


Ich habe schon soviel versucht, hat aber nichts funktioniert, weiß iwer von euch wo der fehler liegt?
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Xeres

Moderator

BeitragSa, Aug 21, 2010 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Verwendest du die Aktuelle BM Version? Bei mir kommt kein Fehler.
- Für die Tasten gibt es eingebaute Konstanten, die wesentlich besser lesbar sind
- Einrückungen Fehlen!
- Späße wie "gear = gear" kannst du weglassen.
- Die ganze Tastenabfrage könnte man wesentlich kürzen; OR würde z.B. schon mal helfen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Thunder

BeitragSa, Aug 21, 2010 15:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bekomme auch EXCEPTION_ACCESS_VIOLATION. Graphics aus BlitzBasic hat andere Parameter als Graphics aus BlitzMax. Drücke dazu in der Standard IDE zweimal F1 nachdem du einen Befehl markiert hast. Dort findest du eine genaue Angabe der Parameter - der 4. der bei dir 1 ist, soll die Wiederholfrequenz des Bildschirms festlegen und der Absturz ist logisch Wink

mfg Thunder
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Xeres

Moderator

BeitragSa, Aug 21, 2010 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Uhm... ja, sollte man nicht löschen, weil man den erzwungenen Vollbildmodus hasst... Embarassed
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

CO2

ehemals "SirMO"

BeitragSo, Aug 22, 2010 2:40
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, danke erstmal! Bin noch sehr an BlitzBasic gewöhnt, erst wor 2 Tagen umgestiegen Smile, sorry

@ Xeres:

- "Für die Tasten gibt es eingebaute Konstanten, die wesentlich besser lesbar sind" - Bin wie gesagt noch sehr an BB gewöhnt, von daher nehm ich immer Scan Code Smile

- "Einrückungen Fehlen!" - War nur ein kleineres Projekt, von daher fand ich Einrückungen überflüssig. Wenn es jetzt ein 1500-Zeilen-Code wäre wären da natürlich einrückungung, aber so.

- "Späße wie "gear = gear"" - kleine Macke von mir: Ich schreibe unnötigen Code (Ich schreibe z.b. auch anstatt
Code: [AUSKLAPPEN]
print variable

Code: [AUSKLAPPEN]
print "" + variable + ""
Smile)

- "Die ganze Tastenabfrage könnte man wesentlich kürzen; OR würde z.B. schon mal helfen." - Ich muss mich erstmal an BMax gewöhnen, dann kann man von mir komplexere Sachen als einfachste If-Abfragen verlangen Smile
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
 

Macintosh

BeitragSo, Aug 22, 2010 13:26
Antworten mit Zitat
Benutzer-Profile anzeigen
und Print macht in BM was anderes als in BB !
In blitzmax wird damit etwas in die KONSOLE geschriben.
und wenn du das 59 mal pro sekunde machst... viel spaß beim spielen.

Benutze BlitzMax: [AUSKLAPPEN]
DrawText "Text",x,y

Thunder

BeitragSo, Aug 22, 2010 21:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Soweit ich weiß entsprechen die BB-Scancodes nicht genau den BlitzMax-Scancodes.
Außerdem: du machst mit diesen "kleinen" Überflüssigkeiten dem Compiler nur Arbeit und im Endeffekt erhältst du dafür Ineffizienz. Ich weiß jetzt nicht genau, wie weit der BlitzMax-Compiler soetwas optimiert, aber man sollte es sich auf keinen Fall angewöhnen.

mfg Thunder
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
 

CO2

ehemals "SirMO"

BeitragDi, Aug 24, 2010 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Thunder:
ScanCodes: Gut das ich mit den Scancodes noch kein größeres projekt gestartet habe - wenn dem wirklich so wäre hätte ich n großes problem gehabt. Ich werd mich mal schlau machen wegen der scancodes für bmax. Und wenn ich hinterher die konstanten benutzen muss, wie ist dass beim Numpad - wie heißen da die konstanten? thxc schonmal im vorraus.

Ich weiß nicht wie du das siehst, aber mir kommt der Code so leserlicher vor, also mit
Code: [AUSKLAPPEN]
[syntax="bmax"]print "" + variable + ""[/syntax]
anstatt
Code: [AUSKLAPPEN]
[syntax="bmax"]print variable[/syntax]
.

und die ineffizienz... naja, darüber kann ich hinwegsehen, wenn es sich nur um ein paar hundertstel sek. berungszeit mehr handelt.
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Xeres

Moderator

BeitragDi, Aug 24, 2010 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Konstanten findest du in der Dokumentation unter
Modules->User input->Key codes
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Thunder

BeitragDi, Aug 24, 2010 20:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Um nochmal auf das konkrete Beispiel zurückzukommen:

Dass er dir leserlicher vorkommt finde ich relativ komisch, weil zwei unnötige Stringverbindungen dabei sind und man nicht auf Anhieb sieht, was ausgegeben werden soll. Egal, wichtiger ist folgendes:

Ich habe jetzt herausgefunden um wieviel das ineffizienter ist und ich habe bemerkt, dass der Blitzmax-Compiler an der Stelle überhaupt nicht optimiert und damit das Programm viel ineffizienter wird.

Gegeben sei eine Variable "variable" des Typs Int:
BlitzMax: [AUSKLAPPEN]
Print variable

wird kompiliert zu:
Code: [AUSKLAPPEN]
push   dword [_bb_variable]
call   _bbStringFromInt
add   esp,4
push   eax
call   _brl_standardio_Print
add   esp,4


Aus:
BlitzMax: [AUSKLAPPEN]
Print ""+variable+""

wird 1. mehr Code und 2. kommen zwei Funktionsaufrufe dazu!
Code: [AUSKLAPPEN]
   push   _1
   push   dword [_bb_variable]
   call   _bbStringFromInt
   add   esp,4
   push   eax
   push   _1
   call   _bbStringConcat
   add   esp,8
   push   eax
   call   _bbStringConcat
   add   esp,8
   push   eax
   call   _brl_standardio_Print
   add   esp,4
   
;//Zusätzliche Funktionsaufrufe (in AT&T-Syntax):
   
;//Aufruf von StringFromInt:

_bbStringFromInt:
   pushl   %ebp
   movl   %esp, %ebp
   pushl   %ebx
   subl   $100, %esp
   leal   -72(%ebp), %eax
   addl   $64, %eax
   movl   %eax, -76(%ebp)
   movl   8(%ebp), %eax
   shrl   $31, %eax
   movl   %eax, -80(%ebp)
   cmpl   $0, -80(%ebp)
   je   L16
   negl   8(%ebp)
   cmpl   $0, 8(%ebp)
   jns   L16
   movl   $11, 4(%esp)
   movl   $LC1, (%esp)
   call   _bbStringFromBytes
   movl   %eax, -84(%ebp)
   jmp   L13
L16:
   leal   -76(%ebp), %eax
   decl   (%eax)
   movl   -76(%ebp), %ebx
   movl   8(%ebp), %ecx
   movl   $1717986919, %eax
   imull   %ecx
   sarl   $2, %edx
   movl   %ecx, %eax
   sarl   $31, %eax
   subl   %eax, %edx
   movl   %edx, %eax
   sall   $2, %eax
   addl   %edx, %eax
   addl   %eax, %eax
   subl   %eax, %ecx
   movl   %ecx, %eax
   addb   $48, %al
   movb   %al, (%ebx)
   movl   8(%ebp), %ecx
   movl   $1717986919, %eax
   imull   %ecx
   sarl   $2, %edx
   movl   %ecx, %eax
   sarl   $31, %eax
   subl   %eax, %edx
   movl   %edx, %eax
   movl   %eax, 8(%ebp)
   testl   %eax, %eax
   je   L17
   jmp   L16
L17:
   cmpl   $0, -80(%ebp)
   je   L19
   leal   -76(%ebp), %eax
   decl   (%eax)
   movl   -76(%ebp), %eax
   movb   $45, (%eax)
L19:
   leal   -72(%ebp), %eax
   subl   -76(%ebp), %eax
   addl   $64, %eax
   movl   %eax, 4(%esp)
   movl   -76(%ebp), %eax
   movl   %eax, (%esp)
   call   _bbStringFromBytes
   movl   %eax, -84(%ebp)
L13:
   movl   -84(%ebp), %eax
   addl   $100, %esp
   popl   %ebx
   popl   %ebp
   ret

;//zwei(!) Aufrufe von bbStringConcat:

_bbStringConcat:
   pushl   %ebp
   movl   %esp, %ebp
   subl   $24, %esp
   movl   8(%ebp), %edx
   movl   12(%ebp), %eax
   movl   8(%eax), %eax
   addl   8(%edx), %eax
   movl   %eax, -4(%ebp)
   movl   -4(%ebp), %eax
   movl   %eax, (%esp)
   call   _bbStringNew
   movl   %eax, -8(%ebp)
   movl   8(%ebp), %eax
   movl   8(%eax), %eax
   addl   %eax, %eax
   movl   %eax, 8(%esp)
   movl   8(%ebp), %eax
   addl   $12, %eax
   movl   %eax, 4(%esp)
   movl   -8(%ebp), %eax
   addl   $12, %eax
   movl   %eax, (%esp)
   call   _memcpy
   movl   12(%ebp), %eax
   movl   8(%eax), %eax
   addl   %eax, %eax
   movl   %eax, 8(%esp)
   movl   12(%ebp), %eax
   addl   $12, %eax
   movl   %eax, 4(%esp)
   movl   8(%ebp), %eax
   movl   8(%eax), %eax
   addl   %eax, %eax
   addl   -8(%ebp), %eax
   addl   $12, %eax
   movl   %eax, (%esp)
   call   _memcpy
   movl   -8(%ebp), %eax
   leave
   ret


Ich habe den Inhalt der verwendeten Funktionen bbStringConcat und bbStringFromInt hinzugefügt um zu verdeutlichen wieviel mehr Code dadurch generiert wird und unnötig durchgelaufen wird.

mfg Thunder
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group