Autor Beitrag
blume283
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 23


Delphi 7
BeitragVerfasst: Mo 11.05.09 22:21 
Hallo,

ich bräuchte Hilfe bei folgendem Fehler.

Einleitung:
Ich habe ein rundenbasiertes Strategiespiel programmiert. Wenn ich einige 10 bis 100 Runden spiele oder die KI spielen lasse, tritt nach einer variablen Anzahl von Runden ein Fehler "Access Violation" auf, manchmal dauert es einige 100 Runden, manchmal nur 50, meist aber länger.

Zum Fehler:
Der Fehler hat die Struktur "00405DAC" und "00000012" (wobei die 12 auch 53 oder 02 oder 0D oder etwas in der Art sein kann, auf jeden Fall ändern sich nur die beiden letzten Stellen). Delphi zeigt dann immer dieselbe Programmierzeile im Programm an. (siehe Anlage Bild "Stack.jpg") Die mit dem roten Pfeil markierte Stack-Zeile zeigt eine Auffälligkeit an. Dort wird ein Parameter mit dem Wert (11, 5) weitergegeben an die nächste Funktion. Er wird aber nicht verändert, sollte also auch mit (11, 5) übergeben werden, was nicht der Fall ist. Der Wert ändert sich "automatisch" in einen unzulässigen Wert.

Bisherige Ansätze:
+ Den größten Teil des Programms mit "Assert" durchsetzt, aber dort keine Meldungen
+ Arraygrenzüberschreitungen weitestgehend überprüft
> "-1" bei Schleifen
> 0 to length()-1 statt low() to high()
> vor schleife 0 to length()-1 überprüft, ob length() > 0
+ Programm trotz Fehler weiterlaufen lassen: Exakt gleicher Fehler kommt nach 1 Spielrunde wieder
- Durchsteppen mit F7 noch nicht (würden zehntausende von Schritten sein, gute Nacht)

Interpretation:
Ich habe schon gelesen, dass ein Fehler "00000xxx" auf einen Zugriff auf ein nicht-initialisiertes Objekt hinweist. Nun ist es aber so, dass während der Rechnungen praktisch nur Folgendes wiederholt wird: a) KI rechnet b) Nach Zug Berechnungen c) Open-GL Bildschirm malen. Zudem wird ja bei der Fehlermeldung eine Quelltextzeile mittem im "Spiel" angezeigt und nicht bei irgendwelchen Objekten, die initialisiert werden müssen. Der Fehler tritt immer in Schritt a) auf, wenn die KI eine Einheit auf ein Feld bewegt, wo etwas ausgelöst wird.

Wo muss ich suchen um den Fehler im Programm zu finden? Was für eine Art Fehler ist es?
Bitte schreibt mir, falls Ihr noch Informationen benötigt.

Über Hilfe würde ich mich sehr freuen.

Viele Grüße

Nils
Einloggen, um Attachments anzusehen!
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Mo 11.05.09 22:27 
benutzt madexcept, dass zeigt dir die codestelle (zeile) an an dem der fehler aufgetreten ist

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Di 12.05.09 07:36 
Du greifst auf ein nicht instantiiertes Objekt zu, deren Referenz (die Objektvariable) den Wert NIL hat.

_________________
Na denn, dann. Bis dann, denn.