AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

EAccesViolation

Ein Thema von hille · begonnen am 4. Apr 2007 · letzter Beitrag vom 6. Apr 2007
Antwort Antwort
Seite 1 von 2  1 2      
hille

Registriert seit: 19. Mär 2006
100 Beiträge
 
#1

EAccesViolation

  Alt 4. Apr 2007, 13:21
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

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
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#2

Re: EAccesViolation

  Alt 4. Apr 2007, 13:25
debug doch mal

vermutlich gibst du irgendwo speicher frei den du später wieder benutzt
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: EAccesViolation

  Alt 4. Apr 2007, 13:25
die Adresse deutet darauf hinn das du vergessen hast ein Object zu erzeugen.
richtig:
Delphi-Quellcode:
componente := TComponente.Create();
componente.DoSomeThing();
falsch:
componente.DoSomeThing();
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
hille

Registriert seit: 19. Mär 2006
100 Beiträge
 
#4

Re: EAccesViolation

  Alt 4. Apr 2007, 13:40
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
  Mit Zitat antworten Zitat
hille

Registriert seit: 19. Mär 2006
100 Beiträge
 
#5

Re: EAccesViolation

  Alt 4. Apr 2007, 13:51
Es war ma wieder ganz einfach

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!


MfG Hille
  Mit Zitat antworten Zitat
hille

Registriert seit: 19. Mär 2006
100 Beiträge
 
#6

Re: EAccesViolation

  Alt 4. Apr 2007, 20:05
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: EAccesViolation

  Alt 4. Apr 2007, 20:09
bei Accessviolations gibt es keine Liste da es eben Speicheradressen sind an die versucht wird zu schreiben/lesen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: EAccesViolation

  Alt 4. Apr 2007, 20:09
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
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
hille

Registriert seit: 19. Mär 2006
100 Beiträge
 
#9

Re: EAccesViolation

  Alt 4. Apr 2007, 20:12
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
  Mit Zitat antworten Zitat
hille

Registriert seit: 19. Mär 2006
100 Beiträge
 
#10

Re: EAccesViolation

  Alt 6. Apr 2007, 13:17
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....
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:35 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