Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zugriffsverletzung bei Adresse 004539E6 im Modul Project1.ex (https://www.delphipraxis.net/89069-zugriffsverletzung-bei-adresse-004539e6-im-modul-project1-ex.html)

eif 25. Mär 2007 16:34


Zugriffsverletzung bei Adresse 004539E6 im Modul Project1.ex
 
hi... will die systemzeit als integer ungerechnet in nem record speichern sollte ja nich so schwer sein...

Delphi-Quellcode:
        GetLocalTime(zeit1);
        start:=zeit1.wMilliseconds+zeit1.wSecond*1000+zeit1.wMinute*60000+zeit1.wHour*360000;

         m:=m+1;
         explode[m].zeit:=start;
         explode[m].x:=p1x;
         explode[m].y:=p1y;
das programm spukt auch keinen fehler aus.. nur sobald genau dies passieren soll sagt mit delphi:

"Im Projekt Project1.exe ist eine Exception der Klasse EAccesViolations afgetreten. Meldung: 'Zugriffsverletzung bei Adresse 004539E6 im Modul 'Project1.exe'. Schreiben von Adresse 00000018'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzten."

weiß nich warum das so ist.. nur das problem hält mich ziemlich auf... bin ein delphi anfänger.. soll für info unterricht bomberman als facharbeit programmieren...

danke für eure hilfe... lg vom eif

Der_Unwissende 25. Mär 2007 17:02

Re: Zugriffsverletzung bei Adresse 004539E6 im Modul Project
 
Zitat:

Zitat von eif
Delphi-Quellcode:
         m:=m+1;
         explode[m].zeit:=start;
         explode[m].x:=p1x;
         explode[m].y:=p1y;
das programm spukt auch keinen fehler aus.. nur sobald genau dies passieren soll sagt mit delphi:

"Im Projekt Project1.exe ist eine Exception der Klasse EAccesViolations afgetreten. ... "
weiß nich warum das so ist..

Hi,
dass Du den Teil postest, für den der Compiler keinen Fehler meldet ist dann aber schon eher verwunderlich. Da steckt dann (syntaktisch) sicherlich auch kein Fehler drin. Interessant wäre dazu dann noch der Aufruf und was Du vorher machst, ganz ohne fällt es deutlich schwerer Dir zu helfen!

An sich wird der Fehler EAccessViolation immer dann ausgelöst, wenn Du auf einen ungültigen Speicherbereich zugreifen möchtest. Dazu gehören Objekt-Referenzen, die nicht auf ein Objekt zeigen oder Zugriffe auf Zeiger und Arrays, die nicht initialisiert wurden. Hier würde ich mal grob darauf tippen, dass es an dem zitierten Code-Ausschnitt liegt. Welchen Wert hat m+1? Und was steht im Array explode an dieser Stelle? Ist da schon etwas? Ist das ein gültiger Index? Usw...
Wahrscheinlich findet hier der Zugriff auf eine ungültige Speicherstelle statt.

An sich kannst Du den Fehler eingrenzen, in dem Du in deinem Quellcode einen Breakpoint (F5) in der Zeile wo die Methode aufgerufen wird setzt. Dann springst Du mit F7 in die Einzelschritt ausführung und läufst über die Zeilen mit F8 rüber oder gehst auch dort mit F7 in die jeweiligen einzelnen Schritte (soweit welche stattfinden). Damit solltest Du die Zeile die den Fehler auslöst recht schnell finden. Während das Programm unterbrochen ist (Du also das Weiterlaufen steuerst) kannst Du mit STRG+F7 auch die Werte der Variablen und Methoden auswerten!

Gruß Der Unwissende

eif 25. Mär 2007 17:22

Re: Zugriffsverletzung bei Adresse 004539E6 im Modul Project
 
hm.. also... das array explode...

Delphi-Quellcode:
type
  TArray = RECORD
     zeit,x,y,:integer;
     end;

  TName2 = array[1..1000] of TArray;
der wert m ist bei start des programms 0
sobald eine bombe gelegt wird:

Delphi-Quellcode:
   if chr(Key) = 'Q' then
       begin
         p1a:='bombe.bmp';
         x:=p1x;
         y:=p1y;
         GetLocalTime(zeit1);
         start:=zeit1.wMilliseconds+zeit1.wSecond*1000+zeit1.wMinute*60000+zeit1.wHour*360000;

         m:=m+1;
         explode[m].zeit:=start;
         explode[m].x:=p1x;
         explode[m].y:=p1y;

         explodieren;
       end;
also die werte für x und y koordinate sowie der integerwert für die systemzeit werden explode zugeordnet und das schlägt fehl bei
Delphi-Quellcode:
 explode[m].zeit:=start;
also sobald ich das Q drücke um die bombe zu legen sagt mir delphi den fehler zugriffsverletzung blabla an.. bis dahin läuft alles glatt.. auch in einzelschritten... und ab da geht nix mehr... und das is für mich eben unverständlich...

falls du mir weiter helfen willst... hab auch icq ^^ 305375469 da könnt ich dir auch ma das prog schichen oder so...

lg vom eif ^^

Der_Unwissende 25. Mär 2007 18:57

Re: Zugriffsverletzung bei Adresse 004539E6 im Modul Project
 
Zitat:

Zitat von eif
hm.. also... das array explode...

Delphi-Quellcode:
type
  TArray = RECORD
     zeit,x,y,:integer;
     end;

  TName2 = array[1..1000] of TArray;

Äh, wo ist jetzt explode? Also wo deklarierst Du explode (denke mal der Typ ist dann TName2?
Initialisierst Du m denn?


Zitat:

Zitat von eif
also sobald ich das Q drücke um die bombe zu legen sagt mir delphi den fehler zugriffsverletzung blabla an.. bis dahin läuft alles glatt.. auch in einzelschritten... und ab da geht nix mehr... und das is für mich eben unverständlich...

Nochmal zu den Einzelschritten, wann genau kommt denn dort der Fehler? In der Zeile mit der Zuweisung? Oder springt er dort nur hin, wenn Du Q drückst und eben nicht im Einzelschrittmodus?
Du hast ja eine Methode, die das drücken einer Taste behandelt, setz einfach dort den Breakpoint und lauf dann in einzelnen Schritten weiter und schau ob der immer macht, was Du erwartest. Solltest Du das schon getan haben und der Fehler taucht eben bei
Delphi-Quellcode:
explode[m].zeit:=start;
auf, dann wäre hier wie gesagt interessant wo explode wie deklariert wurde und welchen Wert m zu dem Zeitpunkt (des Fehlers) hat. Das kannst Du wie gesagt durch das Auswerten ermitteln (oder kurz Maus drüber lassen oder STRG+auf m klicken).

Zitat:

Zitat von eif
falls du mir weiter helfen willst... hab auch icq ^^ 305375469 da könnt ich dir auch ma das prog schichen oder so...

Ok, dazu erstmal: Ich hab kein ICQ. Dann wäre da natürlich der Sinn dieses Forums, der darin liegt, dass Leute mit ähnlichen/gleichen Problemen sicherlich auch ICQ haben aber noch viel schöner hier nachlesen können wie man ein Fehler behebt.
Und zu guter Letzt wären da auch noch die Regeln des Forums, die ganz klar sagen, dass hier keine Aufgaben für Schule/Uni/etc. gelöst werden. Für Dich wäre der Nutzen (und das Erfolgsgefühl) auch sehr beschränkt, wenn jmd. anderes den Fehler findet und korrigiert. Dann hast Du beim nächsten mal das gleiche Problem und keine Lösung. Besser Du findest den selbst (mit Hilfe), spätestens in der nächsten Klausur zahlt sich dann aus :wink:

Aber natürlich helfe ich (und der Rest der DP) sicher gerne weiter!

Gruß Der Unwissende

eif 25. Mär 2007 19:25

Re: Zugriffsverletzung bei Adresse 004539E6 im Modul Project
 
also der fehler tritt genau dann auf wenn ich q drücke... also OnKeyDown dann ermittelt der die variablen/weist die werte zu... explode[m].zeit kriegt seinen wert noch... also hab noch was kleines geändert... aber dann explode[m].x macht er nicht mehr...


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz