Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Cherry
Anmeldungsdatum: 20.06.2007 Beiträge: 249
|
Verfasst am: 20.06.2007, 18:44 Titel: Eigenartiger Absturz |
|
|
Es passiert mir beim Arbeiten mit Pointern, BLoad und FMOD.DLL (!), dass mein Programm sich ohne Vorwarnung beendet - ohne eine Fehlermeldung anzuzeigen! Es ist immer sehr schwierig, die verurscachende Zeile zu finden... Warum passiert dies?
Gruß, Cherry |
|
Nach oben |
|
|
Eternal_pain
Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 20.06.2007, 19:16 Titel: |
|
|
Das passiert glaub jeden hin und wieder mal, da hilft nur muehsame Fehlersuche mit Sleep hier und Print da um festzustellen ab wann sich das Programm aufhaengt _________________
|
|
Nach oben |
|
|
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 20.06.2007, 21:17 Titel: |
|
|
Es ist gut möglich dass Windows dein prog wegen nem Speicherzugriffsfehler killt...
hast du irgendwo ein Array überschritten? Das Prüft der Compiler schl. nicht. |
|
Nach oben |
|
|
Eternal_pain
Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 20.06.2007, 21:20 Titel: |
|
|
beim ueberschreiten von Arrays kommt meist noch ein netter Windows Error! _________________
|
|
Nach oben |
|
|
Cherry
Anmeldungsdatum: 20.06.2007 Beiträge: 249
|
Verfasst am: 21.06.2007, 13:25 Titel: |
|
|
jetzt wirds noch eigenartiger: ich hab jetzt was neues - das Programm läuft normal, beim Beenden erscheint aber ein Fehlerfenster, dass der Vorgang read auf Speicherstelle irgendwas nicht ausgeführt werden konnte... Nach einigem probieren hab ich entdeckt, dass, wenn ich vorher mit FMOD eine Musik abspiele, sich das Programm einfach wieder mittendrin beendet! |
|
Nach oben |
|
|
csde_rats
Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 21.06.2007, 15:28 Titel: |
|
|
Hallo,
welche FreeBasic-Version verwendest du? Ältere Versionen hatten einige komische Bugs, die ein abruptes Beenden des Programms verursachen konnten. Einfach mal
Code: | C:\FreeBasic\fbc -version |
in die Kommandozeile eingeben. Du solltest mindestens 0.17 da stehen haben.
Viele Grüße!
Sebastian _________________
Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 21.06.2007, 16:28 Titel: |
|
|
hm... ich selbst hab jetz einen Arrayzugriff über das Ende hinaus... und... keine Fehlermeldung, beendet halt abrupt.
Meine Vers. is 0.18 |
|
Nach oben |
|
|
Cherry
Anmeldungsdatum: 20.06.2007 Beiträge: 249
|
Verfasst am: 21.06.2007, 19:24 Titel: |
|
|
die fehlermeldung kam ja beim "end"-Befehl... egal, hab jetzt entdeckt, was es war: Beim Laden der Bilder mit Get in einen ImageCreate-Speicherbereich habe ich versehentlich immer 1x1 Pixel zu viel geGETtet und somit in Bereiche geschrieben, wo ich nicht hin schreiben sollte... Gibts eigentlich eine Version, die Runtime Errors ausgibt, anstatt sich zu beenden oder einen Windows-Error zu verursachen? PS: Das wird was mit viel Grafik - ich erhalte bei einer Messung 300-400 FPS (!) - kann das stimmen? Ich verwende einen Sub UPDATE, der den Bildschirm aufbaut, und immer abwechselnd mit einem SLEEP 1 aufgerufen wird |
|
Nach oben |
|
|
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 21.06.2007, 19:28 Titel: |
|
|
PMedia hat Folgendes geschrieben: | Es ist gut möglich dass Windows dein prog wegen nem Speicherzugriffsfehler killt...
hast du irgendwo ein Array überschritten? Das Prüft der Compiler schl. nicht. |
Ähm.
Sicher?
Ich wette, dass er es macht.
Code: |
Dim As Ubyte test(1 To 10)
For i As Integer = 1 To 10
test(i) = i*i
Next i
For i As Integer = 1 To 100
Print test(i)
Next i
|
Mit -exx kompilieren!
Ausgabe des Programms:
Zitat: | [laumen@localhost FreeBASIC-quellcodes]$ ./temp
1
4
9
16
25
36
49
64
81
100
Aborting due to runtime error 6 (out of bounds array access) at line 8 of temp.bas:)
|
Und?
Noch immer der Überzeugung? _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 21.06.2007, 19:34 Titel: |
|
|
Cherry hat Folgendes geschrieben: | die fehlermeldung kam ja beim "end"-Befehl... egal, hab jetzt entdeckt, was es war: Beim Laden der Bilder mit Get in einen ImageCreate-Speicherbereich habe ich versehentlich immer 1x1 Pixel zu viel geGETtet ... |
hachja, erinnert mich immer wieder an mein spiel Fruit Battle... da hab ich immer die ImageCreate-Buffer nen pixel zu groß gehabt... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
Eternal_pain
Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 21.06.2007, 19:38 Titel: |
|
|
Jojo hat Folgendes geschrieben: | hachja, erinnert mich immer wieder an mein spiel Fruit Battle... da hab ich immer die ImageCreate-Buffer nen pixel zu groß gehabt... |
Zu gross kann unter umstaenden zu Grafikfehlern fuehren aber eher selten zu fehlern durch ueberschreiten des Buffers
Bei einem Stillleben vorstellbar, ansonsten moechte ich das auch ma schaffen _________________
|
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 21.06.2007, 20:19 Titel: |
|
|
eben doch. beispiel:
Code: |
A = imagecreate(14,12)
B = imagecreate(14,12)
get(1,1)-(14,12),A
get(1,1)-(12,14),B
|
das führt(e) zu nem hänger... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
Eternal_pain
Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 21.06.2007, 20:29 Titel: |
|
|
bei den beiden Beispielen sind sie beide male zu klein, bzw falsch ausgelesen _________________
|
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 21.06.2007, 20:36 Titel: |
|
|
nein, beide sind NICHT zu klein (dran denken, ich GETte nicht von 0, sondern von 1!) - man dürfte eigenltich erwarten, dass der Speicher für 12*14 px genau so groß ist wie für 14*12 - aber nein, das prog mag das nicht... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
Eternal_pain
Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 21.06.2007, 20:39 Titel: |
|
|
Und das sagt Du jemanden der es geschafft hat auf seinem Desktop zu pixeln _________________
|
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 21.06.2007, 20:41 Titel: |
|
|
jaja, wär cool wenn wir das nochma selbst sehen können _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4594 Wohnort: ~/
|
Verfasst am: 21.06.2007, 20:55 Titel: |
|
|
Jojo hat Folgendes geschrieben: | man dürfte eigenltich erwarten, dass der Speicher für 12*14 px genau so groß ist wie für 14*12 |
Nicht unbedingt. Wahrscheinlich wird erst mal zeilenweise gespeichert, wobei der Speicherbedarf pro Zeile von der Farbenzahl abhängt. Bei 16 Farben können 16 Pixel in ein Byte, also in oberem Fall eine komplette Zeile, egal ob die nun 12 oder 14 Pixel lang ist.
Bei 256 oder mehr Farben könnte es allerdings vielleicht wieder egal sein. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
Eternal_pain
Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 21.06.2007, 21:10 Titel: |
|
|
naja... aber nach dem neuen Pixelformat:
ist der Buffer immer 32byte Header
Pitch*BPP*Y
wobei Pitch, x bzw das naechtsgroesste durch 4 teilbare von x ist
was vermutlich fuer spaetere OGL Texturing functionen gedacht sein wird...
deswegen kann 16*14 auf keinen fall das gleiche wie 14*16 sein _________________
|
|
Nach oben |
|
|
|