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 Inc() (https://www.delphipraxis.net/30570-zugriffsverletzung-bei-inc.html)

Neutral General 26. Sep 2004 16:00


Zugriffsverletzung bei Inc()
 
Liste der Anhänge anzeigen (Anzahl: 1)
Bei dieser Procedure bekomme ich eine Zugriffsverletzung (Anhang)
direkt beim Start (Wann auch sonst :wink: ) auftritt. Ich weis nicht was dazu führt ...
Normalerweise müsste das doch gehen, oder ?

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var i,j : Integer;
begin
for i := 0 to 25 do begin
 for j := 0 to 31 do begin
  Spielfeld[Feld] := TSpielfeld.Create(Self);
   with Spielfeld[Feld] do begin
    Parent := Form1;
    Left := i*38 + 20;
    Top := j*18 + 10;
    Autosize := true;
    Cursor := crHandPoint;
    Hint := ' ';
    OnClick := Imageladen;
    OnMouseMove := ShowHint2;
    Nr := Feld;
   end;
  inc(Feld);
 end;
end;
end;

fkerber 26. Sep 2004 16:02

Re: Zugriffsverletzung bei Inc()
 
Hi!

Was ist denn Feld und was ist Spielfeld?

Ciao Frederic

Neutral General 26. Sep 2004 16:04

Re: Zugriffsverletzung bei Inc()
 
Delphi-Quellcode:
type
  TSpielfeld = class(TImage)
  private
   Nr : Integer;
end;

var
Spielfeld : Array[0..150] of TSpielfeld;
Feld : Integer;

fkerber 26. Sep 2004 16:06

Re: Zugriffsverletzung bei Inc()
 
Hi!

Ich denke mal, dass du Feld zuerst mal intialisieren musst.
Daran könnte es liegen.

Ciao Frederic

Luckie 26. Sep 2004 16:08

Re: Zugriffsverletzung bei Inc()
 
Setz mal die Länge des Arrays mit [oh}SetLenght[/oh].

Robert Marquardt 26. Sep 2004 16:08

Re: Zugriffsverletzung bei Inc()
 
Mach Feld lokal, dann wird dir auffallen das du Feld nicht am Anfang auf Null setzt.
Warum machst du Spielfeld nicht zweidimensional?

Neutral General 26. Sep 2004 16:09

Re: Zugriffsverletzung bei Inc()
 
1. Wie soll ich das machen ?
2. Ohne inc(Feld) Funktioniert es ...
ich habe dann aber nur Spielfeld[0]'s,
was ich nicht will ...

fkerber 26. Sep 2004 16:11

Re: Zugriffsverletzung bei Inc()
 
Hi!

Ich würde es so machen:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var i,j,feld : Integer;
begin
feld:=0;
for i := 0 to 25 do
 begin
   for j := 0 to 31 do
    begin
      Spielfeld[Feld] := TSpielfeld.Create(Self);
      with Spielfeld[Feld] do
        begin
         Parent := Form1;
         Left := i*38 + 20;
         Top := j*18 + 10;
         Autosize := true;
         Cursor := crHandPoint;
         Hint := ' ';
         OnClick := Imageladen;
         OnMouseMove := ShowHint2;
         Nr := Feld;
        end;
      inc(Feld);
    end;
 end;
end;
Ciao Frederic

Neutral General 26. Sep 2004 16:17

Re: Zugriffsverletzung bei Inc()
 
@ fkerber : Bei deiner Lösung gibt es die gleiche Meldung :(
Wie muss ich das Array initialisieren ?

@ Luckie : Kannst du mir bitte ein Beispiel geben ... ich weis nämlich nicht wie man die
Länge eines Arrays setzt.

fkerber 26. Sep 2004 16:33

Re: Zugriffsverletzung bei Inc()
 
Hi!

ich vermute mal, dein Array ist zu klein definiert.
Probier es mal so:

Delphi-Quellcode:
var
  Form1: TForm1;
  Spielfeld : Array[0..832] of TSpielfeld;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i,j,feld : Integer;
begin
feld:=0;
for i := 0 to 25 do
 begin
   for j := 0 to 31 do
    begin
      Spielfeld[Feld] := TSpielfeld.Create(Self);
      with Spielfeld[Feld] do
        begin
         Parent := Form1;
         Left := i*38 + 20;
         Top := j*18 + 10;
         Autosize := true;
         Cursor := crHandPoint;
         Hint := ' ';
         OnClick := Imageladen;
         OnMouseMove := ShowHint2;
         Nr := Feld;
        end;
      inc(Feld);
    end;
 end;
end;
Ciao Frederic

xineohp 26. Sep 2004 16:33

Re: Zugriffsverletzung bei Inc()
 
moin,

ist doch logisch, dass du eine AV kriegst ... dein array ist 151 Elemente groß und du versuchst 26*32=832 Elemente hinzuzufügen!

EDIT: zu langsam :roll:

Neutral General 26. Sep 2004 16:37

Re: Zugriffsverletzung bei Inc()
 
Daaaankeee ... :bounce1:
Hätte ich auch selber drauf kommen können bei
zwei schleifen die jeweils 25 bzw 31 mal durchlaufen
werden mehr als 100 Spielfelder benötigt werden :wall:
Ich hab schon fast das :kotz: bekommen ... :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 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