AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Hilfe beim Beheben einer Access Violation
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe beim Beheben einer Access Violation

Ein Thema von Romi · begonnen am 29. Dez 2008 · letzter Beitrag vom 2. Jan 2009
Antwort Antwort
Seite 1 von 3  1 23      
Romi

Registriert seit: 25. Apr 2007
72 Beiträge
 
#1

Hilfe beim Beheben einer Access Violation

  Alt 29. Dez 2008, 21:27
Hi,

in diesem Thread habe ich ein Programm namens JewelCrack vorgestellt, das noch einen Fehler enthält: Es treten scheinbar zufällig Access Violations auf.

Ich habe diese schon mehrfach im Debugger abgefangen. Sie treten auf, wenn ich auf einen Stein zugreife.

Zum Aufbau des Programms (Sourcecode hängt auch unten an):
Ich habe einen Array[1..400] of tStein. Dieser wird am Anfang mit Steinen bis an den Rand gefüllt und dann werden Einzelne dieser Steine immer wieder zerstört. Ich gehe sehr oft diesen Array durch und greife dabei dann auf bestimmte Steine zu (natürlich nachdem ich geprüft habe, dass diese nicht nil sind und dass diese nicht "deaded" sind (das ist die Andorra2D-Methode (der Grafikengine, die ich benutzte), Sprites zu töten). Und genau bei diesen Zugriffen passiert es. Das komische ist, dass es nicht immer passiert. Man kann gerne mal fünf Spiele spielen, ohne das etwas passiert, und bei sechsten schmeisst er dann mit Fehlern um sich.

Noch ein Kommentar zum Sourcecode:
Er ist technisch gesehen sicherlich nicht sonderlich schön. Aber ich habe ihn ein wenig Kommentiert und strukturiert ist er auch, er sollte eigentlich relativ leicht zu lesen sein. Verbesserungsvorschläge und Unschönheiten in meiner Arbeit nehme ich allerdings gerne entgegen, man will ja dazulernen
Erstellt wurde er mit Delphi 7, später zu Delphi 2009 konvertiert. Die Projektdatei ist also für D2009.

Es ist mir eigentlich relativ egal, was ihr mit dem Sourcecode macht. Nur wenn ihr ihn modifizieren wollt, dann lasst doch bitte meinen Namen dabei stehen.

Danke schonmal,
Roman

EDIT: Hier bekommt ihr Andorra2D her: http://downloads.sourceforge.net/and...se_mirror=osdn
Angehängte Dateien
Dateityp: zip jewelcrack_sourcecode_137.zip (223,9 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Hilfe beim Beheben einer Access Violation

  Alt 29. Dez 2008, 21:46
Hallo,

AdDraws not found.

Ist wohl diese Andorra ?

Warum hängt das nicht mit dan ?
*faul*
Ausserdem gibt es je verschieden Versions-Stände.



Heiko
Heiko
  Mit Zitat antworten Zitat
Romi

Registriert seit: 25. Apr 2007
72 Beiträge
 
#3

Re: Hilfe beim Beheben einer Access Violation

  Alt 29. Dez 2008, 21:47
Zitat von hoika:
Hallo,

AdDraws not found.

Ist wohl diese Andorra ?

Warum hängt das nicht mit dan ?
*faul*
Ausserdem gibt es je verschieden Versions-Stände.



Heiko
Achso, natürlich. Andorra2D gibts hier: http://downloads.sourceforge.net/and...se_mirror=osdn
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Hilfe beim Beheben einer Access Violation

  Alt 29. Dez 2008, 21:56
Hallo,

nunja ;(
klappt ja erst ab D7 (habe hier D6).

Aber

Das hier so komisch aus.
Delphi-Quellcode:
  for i := 1 to 400 do
    if (Steine[i] <> nil) AND not (Steine[i].Deaded) then Steine[i].dead;

  XXX

      Steine[arr] := tStein.Create(AdSpriteEngine);
      Steine[arr].einrichten(offsetX, offsetY, random(5));
Bist dui dir sicher, dass die Stein auch wirklich als Klasse (Objekt) gelöscht werden.
Scheibe mal einen destructor für TStein und setze mal nen BreakPoint.

Der Destructor muss ja bei .dead aufgerufen werden.

Ausserdem würde ich mal mit memcheck oder FastMM4 prüfen, ob irgendwelche Speicherlecks drin sind.


Heiko
Heiko
  Mit Zitat antworten Zitat
Romi

Registriert seit: 25. Apr 2007
72 Beiträge
 
#5

Re: Hilfe beim Beheben einer Access Violation

  Alt 29. Dez 2008, 22:10
Danke für deine Antwort.

Zitat von hoika:
Bist dui dir sicher, dass die Stein auch wirklich als Klasse (Objekt) gelöscht werden.
Scheibe mal einen destructor für TStein und setze mal nen BreakPoint.
Die Klasse tStein erbt ja von TImageSpriteEx. Diese erbt wiederrum von ein paar anderen Klassen, aber ganz unten haben diese auch einen Destructor, der aufgerufen wird, sobald das Sprite "dead" ist.

Zitat von hoika:
Ausserdem würde ich mal mit memcheck oder FastMM4 prüfen, ob irgendwelche Speicherlecks drin sind.
Mh, hab ich keine Ahnung von. Aber das werde ich mir mal angucken.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Hilfe beim Beheben einer Access Violation

  Alt 29. Dez 2008, 22:19
Hallo,

memcheck finde ich einfacher


in der dpr als erste unit mit

uses
MemCheck,

Memcheck einbinden
(http://v.mahon.free.fr/pro/freeware/memcheck/)

und als 1. Befehl nach dem Begin

begin
MemChk;

Damit wird NACH dem Programm laufen (also nach dem Beenden) Speicherlecks angezeigt.


Heiko
Heiko
  Mit Zitat antworten Zitat
Romi

Registriert seit: 25. Apr 2007
72 Beiträge
 
#7

Re: Hilfe beim Beheben einer Access Violation

  Alt 29. Dez 2008, 22:28
Also, mit memcheck crasht das Ding sofort am Start. Warscheinlich inkompatibel zu D2009?
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Hilfe beim Beheben einer Access Violation

  Alt 29. Dez 2008, 22:40
Hey,
probiers mal mit FastMM!
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Hilfe beim Beheben einer Access Violation

  Alt 29. Dez 2008, 23:59
Hallo,

< Also, mit memcheck crasht das Ding sofort am Start. Warscheinlich inkompatibel zu D2009? >
hm ?

Mal nen breakpoint in die dpr gesetet ?


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#10

Re: Hilfe beim Beheben einer Access Violation

  Alt 30. Dez 2008, 01:04
HI,

keine Ahnung, ob das weiterhilft, aber nutze mal zum Zerstören FreeAndNil. So hast du auf jeden Fall ein NULL-Objekt. Und auch bei Exceptions beim Free - mal den Wert mit nil überschreiben (auch wenn dann ein Speicherleck entsteht). Ansonsten, wie gesagt: Schnelle boolische Auswertung mit {$B+} anschalten.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz