Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Array Zugriffsverletzung (https://www.delphipraxis.net/145359-array-zugriffsverletzung.html)

Kytrix 30. Dez 2009 13:02


Array Zugriffsverletzung
 
Delphi-Quellcode:
unit mWürfel;

interface

type
  TWürfel=Class(TObject)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    PunkteArray: Array[1..8, 1..3] of Integer;
    function GetPunkte(Punkt, Koordinate: Integer): Integer;
    procedure SetPunkte(Punkt, Koordinate, Wert: Integer);
  end;

implementation

function TWürfel.GetPunkte(Punkt, Koordinate: Integer) :Integer;
begin
  Result:=PunkteArray[Punkt,Koordinate];
end;

procedure TWürfel.SetPunkte(Punkt, Koordinate, Wert: Integer);
begin
  PunkteArray[Punkt,Koordinate]:=Wert;
end;

end.

Delphi-Quellcode:
PunkteArray[Punkt,Koordinate]:=Wert; //Hier bekomme ich die Fehlermeldung
Erste Gelegenheit für Exception bei $75079617. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 004AE2FC in Modul 'Engine.exe'. Schreiben von Adresse 00000008'. Prozess Engine.exe (4720)

Irgendwie stehe ich voll auf dem Schlauch =/ ....

patti 30. Dez 2009 13:10

Re: Array Zugriffsverletzung
 
Hat vielleicht nichts mit deinem Problem zu tun, aber auf Umlaute würde ich persönlich verzichten. Aus dem "Würfel" würde ich einen "Wuerfel" machen!

chaosben 30. Dez 2009 13:11

Re: Array Zugriffsverletzung
 
Ich würde mal sagen Punkt ist größer als 8 oder Koordinate ist größer als 3 oder beides.

Micha88 30. Dez 2009 13:13

Re: Array Zugriffsverletzung
 
1. auf Umlaute (würfel) verzeichten
2.
Delphi-Quellcode:
PunkteArray[Punkt,Koordinate]:=Wert;
Dann wird wohl entweder Punkt kleiner als 1 oder größer als 8 sein
oder
Koordinate wird kleiner als 1 oder größer als 3 sein.

Mach mal folgendes uns poste das Ergebnis dann:
Delphi-Quellcode:
showmessage(IntToStr(Punkt) + ', ' + IntToStr(Koordinate));
//PunkteArray[Punkt,Koordinate]:=Wert;

Kytrix 30. Dez 2009 13:15

Re: Array Zugriffsverletzung
 
Delphi-Quellcode:
PunkteArray[2,2]:=3;
selbe fehlermeldung an den übergebenen werten kann es nicht liegen .... beide liegen in Wertebeereich 1..3 und 1..8

Tobinator 30. Dez 2009 13:18

Re: Array Zugriffsverletzung
 
vielleicht einfach nur vergessen zu createn?

helgew 30. Dez 2009 13:20

Re: Array Zugriffsverletzung
 
ü:
Delphi-Quellcode:
[Error] Unit1.pas(12): Illegal character in input file: 'ü' ($FC)

dann mach ich:
Delphi-Quellcode:
var
  w : TWuerfel;
begin
  w := TWuerfel.Create;
  w.SetPunkte(2,2,3);
und der Rest tut. Also was ist passiert? Du hast die Klasse TWuerfel deklariert. Genaugenommen handelt es sich dabei um einen Satz von Funktionen, die beim Aufruf stets einen Zeiger auf einen Speicherbereich mitbekommen. durch den Create() - Konstruktor wird der eigentlich für eine Instanz (dem eigentlichen Objekt) benötigte Speicher reserviert. Ein Objekt, wie es dann w ist, wendet die in der Klassendeklaration aufgeführten Methoden auf den Speicherbereich, der hinter w als Zeiger steckt, an.
Daher ist es wichtig, sowohl die Klasse zu deklarieren als auch den Konstruktor auszuführen, der eine Instanz erzeugt.

Kytrix 30. Dez 2009 13:25

Re: Array Zugriffsverletzung
 
Delphi-Quellcode:
unit mMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, mWürfel;

type
  TMain = class(TForm)
    Timer1: TTimer;
    Button1: TButton;
    ImProjEbene: TImage;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    Würfel: TWürfel;  // Hier erzeuge ich doch ?
  public
    { Public-Deklarationen }
  end;

var
  Main: TMain;

implementation

{$R *.dfm}

procedure TMain.Button1Click(Sender: TObject);
begin
  Würfel.SetPunkte(2,2,4);
  Würfel.SetPunkte(2,3,3);
  Label1.Caption:=IntToStr(Würfel.GetPunkte(2,2)) + IntToStr(Würfel.GetPunkte(2,3));
end;


end.

Tobinator 30. Dez 2009 13:27

Re: Array Zugriffsverletzung
 
Delphi-Quellcode:
procedure TMain.Button1Click(Sender: TObject);
begin
  Würfel := TWürfel.Create; // Das muss noch rein
  Würfel.SetPunkte(2,2,4);
  Würfel.SetPunkte(2,3,3);
  Label1.Caption:=IntToStr(Würfel.GetPunkte(2,2)) + IntToStr(Würfel.GetPunkte(2,3));
  Würfel.free;   // Das evtl. auch noch
end;

Kytrix 30. Dez 2009 13:30

Re: Array Zugriffsverletzung
 
hat sich erledigt hab wirklich das erzeugen vergessen ..... -.-


sprich mit
Delphi-Quellcode:
  .....
  Würfel:=TWürfel.Create;
  .....
vielen dank leute und entschuldigt bitte den unnötigen thread


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 Uhr.
Seite 1 von 2  1 2      

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