Array-Wirrsinn
Übersicht

![]() |
DAKBetreff: Array-Wirrsinn |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich bastel ja gerade an einem BitzBasic-Compiler, und bin dabei auf das hier gestoßen:
BlitzBasic: [AUSKLAPPEN] Dim test(5) Warum funktioniert das? BlitzBasic: [AUSKLAPPEN] Dim test(5) Funktioniert aber nicht. Auch das Beispiel aus der Hilfe liefert komische Ergebnisse. BlitzBasic: [AUSKLAPPEN] Graphics 640,480,0,2 Hier habe ich problemlos (schrittweise) die For-Schleifen bis zu 375 gehen lassen (und das obwohl hier drei Arrays mit einer Größe von nur 100 gegeben sind). Bei 376 ist es dann abgestürzt. Jetzt (mit ansonsten unverändertem Code) stürzt es bei 110 schon ab, aber erst, sobald man ESC drückt (über 110 aber auch schon vorher). Hat irgendwer eine Ahnung, was für einen Wahnsinn Blitz da tut? Zur Referenz: ich verwende BlitzPlus 1.47 auf Windows 7 64-Bit. Ist das eine Eigenschaft, die in einem Crosscompiler auch vorhanden sein muss, da er ja außerhalb der Spezifikationen ist? |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm, etwas veraltete Blitz-Version hast du da.
Bei mir geht schon das erste Beispiel nicht. Bin aber grad zu blöd meine Version rauszufinden, tippe so auf 105. Ich würd jedenfalls sagen dass du so ein Verhalten nicht unterstützen musst. Siehst ja selber, dass Programmierer damit nix anfangen können ![]() mfG, Christoph |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
also ich schätze mal, dass hier der DEBUG MODE seine Arbeit nicht tut! Ohne ihn kannst Du die Dimension eines Arrays einfach sprengen. Dann wird plötzlich in das RAM hinter dem Array reingeschrieben.
Sowas geht solange gut, bis man auf Bereiche mit Programm-Code trifft und dort quasi was "rein-poked". Dort erfolgt dann der Absturz. Das ist meist die eigene EXE, kann aber auch mal BlitzBasic sein, oder im schlimmsten Fall ein komplett anderer Prozess, z.B. Windows. Der DEBUG Mode versucht solche Fehler zu erkennen und antwortet dann mit einer Fehlermeldung. Dazu muss aber jeder Deiner Befehlsschritte immer und jedesmal durch den DEBUGGER. Das kostet Performance. Darum kann man den DEBUGGER auch ausschalten. Das sollte man aber immer erst tun, wenn man das eigene Programm umfangreich getestet hat. |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sehr interessant. Ich bin inzwischen wohl doch zu sehr Java-verwöhnt. Mir ist gar nicht in den Sinn gekommen, dass Blitz die Arraygrößen nicht checken würde! Ich hab zuerst gedacht, dass Blitz eventuell irgendeine Art von Map als Arraymissbraucht, das hätte aber auch keinen Sinn gemacht. Macht aber Sinn. Sowei ich mich entsinne kompiliert Blizt ja über c, und das macht das ja auch so.
Ich hab gedacht, dass ich den Debugger eingeschalten gehabt habe. Wird dem wohl nicht so gewesen sein. Da es also Fehlverhalten ist, werde ich das so nicht einbauen (vor allem auch, weil ich keine Ahnung habe, wie man sowas in Java abbilden sollte, so sicher wie Java mit sowas sonst umgeht). Danke für die Hilfe! |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Midimaster hat Folgendes geschrieben: ... oder im schlimmsten Fall ein komplett anderer Prozess, z.B. Windows.
Nein, das ist absolut ausgeschlossen. |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Stimmt, das Problem gab es ja nur im Real Mode. Durch den virtuellen Speicher hat ja jedes Programm im Grunde einen eigenen RAM-Speicher. | ||
Gewinner der 6. und der 68. BlitzCodeCompo |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group