16.05.2012, 08:43
(09.05.2012, 21:39)Arbosh schrieb: So mal wieder was neues: BrightEyes ist bei mir heut zum zweiten mal mit 'nem Segfault abgestürzt. Beim ersten Mal hatte mir die Shell noch keinen Coredump gemacht, aber diesmal war ich vorbereitet, hier ist's passiert:
Leider läßt sich das ganze nicht zuverlässig reproduzieren. Ich habe den Coredump aber erstmal gesichert falls noch mehr Infos nötig sind (z.B. Variableninhalte aus höheren Stackframes).
Ein Fix ist online.
Ich komme dem Problem langsam auf die Schliche. Die Funktion zum Laden der Kampfsprites wird mit einem scheinbar ungültigen Wert (-1) aufgerufen, welcher nicht abgefangen wird. Diese gibt dann einen ungültigen Zeiger zurück, der von process_nvf() weiterverarbeitet wird und den Absturz auslöst.
Den wirklichen Fehler kann ich im Moment nicht beheben, da der entsprechende Programmteil noch nicht
rekonstruiert ist.
Um den Absturz zu umgehen gebe ich jetzt einfach eine andere gültige Adresse zurück.
Dadurch wird mal kurz ein falsches Bild eingeblendet, welches spätestens beim nächsten Zug der Figur wieder korrigiert wird.
Es war abzusehen, dass diese Art von Fehler irgendwann auftritt.
Unter DOS gibt es keinen Speicherschutz der verhindert, dass Programme auf Speicher zugreifen welcher ihnen nicht gehört.
Heute ist das (zum Glück) nicht mehr so und wir können die Fehler von früher entdecken und beheben.