AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Zugriffsverletzung bei Adresse ...
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriffsverletzung bei Adresse ...

Ein Thema von Informatik2012 · begonnen am 30. Mai 2011 · letzter Beitrag vom 30. Mai 2011
Antwort Antwort
Informatik2012

Registriert seit: 30. Mai 2011
30 Beiträge
 
#1

Zugriffsverletzung bei Adresse ...

  Alt 30. Mai 2011, 10:53
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:
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;
Das ist die Typen-Deklaration. Und die Fehlerrelevanten Funktionen:
Delphi-Quellcode:
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;
Nach dem Klicken des Buttons wird nicht gezeichnet und die Fehlermeldung kommt nach einiger Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Zugriffsverletzung bei Adresse ...

  Alt 30. Mai 2011, 10:56
Zitat:
Result.Create;
-->Result := TMensch.Create;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
schlecki

Registriert seit: 11. Apr 2005
Ort: Darmstadt
148 Beiträge
 
Delphi XE2 Enterprise
 
#3

AW: Zugriffsverletzung bei Adresse ...

  Alt 30. Mai 2011, 11:29
oder noch besser, gleich einen richtigen Konstruktor bauen...

Delphi-Quellcode:
  type TMensch = class(TObject)
  private
    //fx_koo : integer;
    //fy_koo : integer;
    FCoords: TPoint;
    schatz : boolean;
    IP_private : integer;
    bewegen : boolean;
    anzahl_bewegen : integer;
  public
    constructor Create(const IP: Integer; const Coords: TPoint); reintroduce;
// property x_koo : integer read fx_koo;
// property y_koo : integer read fy_koo;
    property Coords: TPoint read FCoords;
    procedure set_koo(x,y : integer);
    property IP : integer read IP_private;
    procedure set_IP(IP:integer);
 end;

constructor TMensch.Create(const IP: Integer; const Coods: TPoint);
begin
  inherited Create();
  FIP := IP;
  FCoords := Coords;
end;
und dann einfach
Mensch := TMensch.Create(127, TPoint(0, 0));
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

AW: Zugriffsverletzung bei Adresse ...

  Alt 30. Mai 2011, 11:37
Die Klassen TFeld und TMensch haben gemeinsame Properties.
Daher sollte man eine gemeinsame Basisklasse einführen.
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:55 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