Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Klasse funktioniert nicht (https://www.delphipraxis.net/93340-klasse-funktioniert-nicht.html)

fidibus 4. Jun 2007 15:23


Klasse funktioniert nicht
 
Hallo Alle,

ich versuche gerade, etwas mit einer Klassendeklaration zu programmieren. Leider funktioniert es nicht, wenn ich auf die von mir erstellte Klasse zugreifen will. Jedes mal, beim Zugriff kommt eine Exception "Zugriffverletzung bei Adresse... . Fehler beim Schreiben auf Speicher."
Was mache ich denn da falsch?

Delphi-Quellcode:
type
  Feld = class
  public
   Pixel : Array of Array of Array of Integer;
   PixDef : Array of Array of Integer;
   procedure init();
  end;

...

 private
    { Private-Deklarationen }
    Panel : Array [1..2] of Feld;

...

procedure Feld.init();
begin
  SetLength(Pixel,20,20,2);
  SetLength(PixDef,400,4);
end;

...

  for i := 1 to 2 do
  begin
    Panel[i] := Feld.Create;
    Panel[i].init;
    cpx[i] := 1;
    cpy[i] := 1;
  end;

...

Panel[1].Pixel[i,k,l] := 0; //hier tritt der Fehler auf
Danke für Eure Hilfe,
der fidibus

Der_Unwissende 4. Jun 2007 15:25

Re: Klasse funktioniert nicht
 
Zitat:

Zitat von fidibus
ich versuche gerade, etwas mit einer Klassendeklaration zu programmieren. Leider funktioniert es nicht, wenn ich auf die von mir erstellte Klasse zugreifen will. Jedes mal, beim Zugriff kommt eine Exception "Zugriffverletzung bei Adresse... . Fehler beim Schreiben auf Speicher."
Was mache ich denn da falsch?

Delphi-Quellcode:
Panel[1].Pixel[i,k,l] := 0; //hier tritt der Fehler auf

Hi,
kontrollier mal den Wert von i, k und l, ob die alle gültig sind!

fidibus 4. Jun 2007 15:29

Re: Klasse funktioniert nicht
 
Hmmm,

ich denke schon...

Delphi-Quellcode:
 

...

for i := 1 to 20 do
  begin
    for k := 1 to 20 do
    begin
      for l := 1 to 2 do
      begin
        Panel[1].Pixel[i,k,l] := 0;
      end;
    end;
  end;

...
Gruß, der fidibus

daddy 4. Jun 2007 15:33

Re: Klasse funktioniert nicht
 
Die Indizes für I, K und L beginnen nicht bei 1 sondern bei 0 unden enden entsprechend auch einen Wert früher.

Gruß Daddy

Der_Unwissende 4. Jun 2007 15:35

Re: Klasse funktioniert nicht
 
Ja, hier liegt Dein Fehler.

Dynamische Arrays sind immer 0-indexiert. Das erste Element steht immer am Index 0 (bei Strings sieht das anders aus, da ist es die 1). Entsprechend musst Du hier in einer Schleife von 0 bis Length(array) - 1 laufen.
Bei statischen Arrays (solche wo die Länge feststeht) kannst Du wiederum den Startindex angeben (bei Dir 1..2). Das es hier diese Unterscheidung gibt und insbesondere, das Strings eben immer 1-indexiert, dynamische Arrays hingegen immer 0 indexiert sind ist halt eine (dumme) Delphi-Besonderheit. Musst Du einfach so im Hinterkopf behalten.
Wenn Du also die Schleifen entsprechend anpasst, sollte das Problem gelöst sein.

Gruß Der Unwissende

[edit]
kein roter kasten!
[/edit]

fidibus 4. Jun 2007 15:39

Re: Klasse funktioniert nicht
 
Hallo,

danke, das war es natürlich, es sind die kleine Dinge, die einem das Leben schwer machen. :wall:

Ich werde mal den User reseten müssen.

Der fidibus


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