Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi EAccesViolation (https://www.delphipraxis.net/89698-eaccesviolation.html)

hille 4. Apr 2007 12:21


EAccesViolation
 
Hallo DP,

ich wusste nicht genau wo ich meine Frage stellen sollte und so stelle ich sie hier.
Also ich bekomme bei meinem Programm folgende Fehlermeldung:

Im Projekt Project2.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: Zugriffsverletzung bei Adresse 0046BBB3 in Modul 'Project2.exe'. Lesen von Adresse 00000028'. Prozess wurde angehalten. Mit einzelne Anweisung oder Start fortsetzen.

Ich habe diese Fehlermeldung bei dem Programm schon oft erhalten aber bis jetzt immer "umgehen" können.
Nun habe ich aber keinen Plan.
Nun aber zum Programm:

-Das Programm benutzt DelphiX - Komponenten (DXDraw, DXTimer, DXImageList, DXInput)
-Ich habe viele *.bmp Bilder ( da es ja nicht mit jpeg geht ) --> eines dieser Bilder ist 7-11 MB
groß und mehrere kleinere.
-2 Formen (wenn man bei der einen auf Button 1 klickt öfnet sich das SpielFeld und es werden alle
Bilder gezeichnet ( das Ladeanzeige einfach übersehen --> ist noch nicht fertig )
-Sobald man, wenn man das SpielFeld sieht, den Spieler bewegt, also die Pfeiltasten drückt, dann
kommt die oben genannte Meldung
-Ich habe schon in der DP nachgelesen und nur erfahren das es was mit falschen arrays zu tun hat -
in der procedure TSpieler.DoMove(...); gibt es mehrere solcher arrays in for-schleifen gepackt -
nur sehe ich den Fehler nicht

{Das Programm und der Quelltext gibts hier ( 4,4 MB im Zip )}

Ich hatte bei meinen letzten versuch diese Meldung zu umgehen einige Einstellungen in Delphi Vorgenommen:

Unter Tools/Debugger Optionen/Sprach-Exceptions --> da habe ich EAccesViolation hinzugefügt (später wieder raus)
Unter Tools/Debugger Optionen/BS-Exceptions --> da habe ich bei Schutzverletzung vom Debugger und behandelt starten reingemacht (später wieder raus)
Ich hoffe nicht das das was damit zu tun hat.


//ich hoffe ihr könnt meinen Quelltext entziffern :oops:

Kann es auch vllt daran liegen, das ich zuviele Bilder im Programm habe? Ich kenne mich leider nicht mit EAccesViolation aus und was das mit dem Speicher zu tun hat ( DeplhiHilfe hat mir auch nicht grade geholfen....)

Ich hoffe ihr könnt mir helfen, denn das Programm lief einwandfrei bis ich ein neues Bild in die DXImageList geladen habe (bild 26)



MfG Hille

bttb930 4. Apr 2007 12:25

Re: EAccesViolation
 
debug doch mal

vermutlich gibst du irgendwo speicher frei den du später wieder benutzt

SirThornberry 4. Apr 2007 12:25

Re: EAccesViolation
 
die Adresse deutet darauf hinn das du vergessen hast ein Object zu erzeugen.
richtig:
Delphi-Quellcode:
componente := TComponente.Create();
componente.DoSomeThing();
falsch:
Delphi-Quellcode:
componente.DoSomeThing();

hille 4. Apr 2007 12:40

Re: EAccesViolation
 
Ein Objekt vergessen? Mhmmmm....ich schau ma nach

Mit dem Speicher - also ich habe den PC immer mal neugestartet und auch neu debugt aber geht nicht anders

hille 4. Apr 2007 12:51

Re: EAccesViolation
 
Es war ma wieder ganz einfach :mrgreen:

Das Problem:

Ich habe in USpielLaden ne Schleife: for z:=1 to 130 do Componente.DoSomething[z]
In USpielFeld wieder ne Schleife for z:=1 to 140 do Componente.DoSomething[z]

--> 10 Komponenten bzw. Klassen waren nicht erstellt - Danke! :thumb: :thumb:


MfG Hille

hille 4. Apr 2007 19:05

Re: EAccesViolation
 
So ich habe da ein weiteres EAccessViolation Problem.
Diesmal:

... Zugriffsverletzung bei Adresse 0046BF2D....Lesen von Adresse 07AC4AB4 fehlgeschlagen...

Was hat das nun zu bedeuten?
Gibt es irgendeine Liste wo alle Exceptions und deren Adressen sowie mögliche Lösungen aufgelistet sind?

MfG Hille

SirThornberry 4. Apr 2007 19:09

Re: EAccesViolation
 
bei Accessviolations gibt es keine Liste da es eben Speicheradressen sind an die versucht wird zu schreiben/lesen.

Neutral General 4. Apr 2007 19:09

Re: EAccesViolation
 
Hat ja mit der Adresse nix zu tun. Die sind ja "immer" unterschiedlich. Kommt halt drauf an wo grad frei ist. Das einzige was dir Eine AV (AcessViolation) sagt ist das du auf Speicher zugreifst der nicht initialisiert wurde -> D.h Componente/Klasse wurde nicht erstellt/schon zerstört und man greift auf Methoden zu z.B oder sowas passiert auch mal wenn man mit Pointern rumspielt.

Gruß
Neutral General

hille 4. Apr 2007 19:12

Re: EAccesViolation
 
ne pointer sind es nicht....und ich habe diesmal nachgeschaut ob ich alles erstellt habe....
naja - dann muss ich mal suchen
wenigstens weiß ich jetzt was diese Exception aussagt

Danke :thumb:

hille 6. Apr 2007 12:17

Re: EAccesViolation
 
Gut - ich bin fast fertig und nun wieder ne EAcceesViolation.

Diesmal aber irgendwie was komisches.

Wenn ich den Spieler bewege passiert erstma nix, kurze Zeit später (so 4 sek) wenn ich den Spieler nach links, oben, unten oder rechts bewegen will kommt ne Exception.

Jetzt habe ich das Programm mal mit nem Haltepkt versehen und die Schritte geprüft.

Das Programm hängt sich bei der DXDraw- Unit auf

Delphi-Quellcode:
function TPictureCollectionItem.GetHeight:Integer;
begin
Result:=FPatternHeight;
if (Result<=0)then Result :=FPicture.Height;
end;
An der Stelle Result:=FPatternHeight;

Mein Quelltext:
Delphi-Quellcode:
If (isLeft in FormSpielFeld.DXInput1.States) then begin
  with Spieler do begin
    Image:=FormSpielFeld:DXImageList1.Items[1];
    AnimCount:=4; //oder 2 je nach Bild
    AnimStar:=0;
    AnimSpeed:=50/1000;
    AnimLooped:=true;
  end;
  ...
Das wäre der Code beim Bewegen des Spielers zum Bild ändern (halt nach links --> Bild wo Spieler nach links läuft)

Nur weiß ich nicht was mit FPatternHeight gemeint ist - PatternHeight ist ja die größe eines Bildes in einem großen ( so ungefähr ). Ich finde einfach den Fehler nicht....


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 Uhr.
Seite 1 von 2  1 2      

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