![]() |
Zugriffsverletzung bei Adresse ...
Also folgendes Problem. Wir haben ein freies Projekt auf, und haben uns für ein Labyrinth-Spiel entschieden. Aber alleine schon nur beim Spielsystem tritt der Fehler "zugriffsverletzung bei adresse 00411C1A".
Der für den Fehler relevante Quellcode ist wie folgt:
Delphi-Quellcode:
Das ist die Typen-Deklaration. Und die Fehlerrelevanten Funktionen:
unit game;
interface type TFeld = class(TObject) private fx_koo : integer; fy_koo : integer; l_wand: boolean; r_wand: boolean; o_wand: boolean; u_wand: boolean; schatz: boolean; public property x_koo : integer read fx_koo; property y_koo : integer read fy_koo; procedure set_koo(x,y : integer); property owand : boolean read o_wand; property lwand : boolean read l_wand; property rwand : boolean read r_wand; property uwand : boolean read u_wand; procedure set_wand(o,u,r,l : boolean); end; type TMensch = class(TObject) private fx_koo : integer; fy_koo : integer; schatz : boolean; IP_private : integer; bewegen : boolean; anzahl_bewegen : integer; public property x_koo : integer read fx_koo; property y_koo : integer read fy_koo; procedure set_koo(x,y : integer); property IP : integer read IP_private; procedure set_IP(IP:integer); end; TMap= array of array of TFeld; function generiere_karte(x_Laenge,y_Laenge : integer):TMap; procedure loesche_karte(Map: TMap); function generiere_mensch(IP,x,y: integer):TMensch; procedure loesche_mensch(Mensch :TMensch); function laufe_oben(Mensch : TMensch; Map : TMap):boolean; function laufe_unten(Mensch : TMensch; Map : TMap):boolean; function laufe_rechts(Mensch : TMensch; Map : TMap):boolean; function laufe_links(Mensch : TMensch; Map : TMap):boolean; function bewegen(Mensch : TMensch):boolean;
Delphi-Quellcode:
Nach dem Klicken des Buttons wird nicht gezeichnet und die Fehlermeldung kommt nach einiger Zeit.
procedure TFeld.set_koo(x,y : integer);
begin fx_koo :=x; fy_koo :=y; end; procedure TFeld.set_wand(o,u,r,l : boolean); begin o_wand := o; u_wand := u; r_wand := r; l_wand := l; end; procedure TMensch.set_koo(x,y : integer); begin fx_koo :=x; fy_koo :=y; end; procedure TMensch.set_IP(IP : integer); begin IP_private := IP; end; function generiere_karte(x_Laenge,y_Laenge : integer):TMap; var i,k,i2,k2 : integer; begin i2:=0; k2:=0; SetLength(Result,x_Laenge,y_Laenge); for i:=0 to x_laenge-1 do begin for k:=0 to y_Laenge-1 do begin Result[i,k]:=TFeld.Create; with Result[i,k] do begin fx_koo:=i2; fy_koo:=k2; set_wand(False,False,False,False); schatz:=False; (* if i=0 then o_wand:=true; if i=x_laenge-1 then u_wand:=true; if k=0 then l_wand := true; if k=y_laenge-1 then r_wand:= true; *) end; inc(k2); end; inc(i2); end; end; function generiere_mensch(IP,x,y: integer):TMensch; begin Result.Create; Result.IP_private := IP; Result.set_koo(x,y); Result.anzahl_bewegen := 0; end; procedure TForm1.Button1Click(Sender: TObject); begin x:=20; y:=20; Map:=generiere_karte(10,10); Mensch1:=generiere_mensch(1,1,1); PaintBox1.Color:=clWhite; Paintbox1.Canvas.Rectangle(x,y,x+20,y+20); end; |
AW: Zugriffsverletzung bei Adresse ...
Zitat:
Delphi-Quellcode:
Result := TMensch.Create;
|
AW: Zugriffsverletzung bei Adresse ...
oder noch besser, gleich einen richtigen Konstruktor bauen...
Zitat:
Delphi-Quellcode:
Mensch := TMensch.Create(127, TPoint(0, 0));
|
AW: Zugriffsverletzung bei Adresse ...
Die Klassen TFeld und TMensch haben gemeinsame Properties.
Daher sollte man eine gemeinsame Basisklasse einführen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:35 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