![]() |
"array of Pointer" und eine Zugriffsverletzung...
Hi liebe Leut'!
Ich komme gleich mal zum Punkt... Folgende Deklaration:
Delphi-Quellcode:
type
PSolarSystem = ^TSolarSystem; TUniverse = class(TObject) public Width, Height : Int64; SolarSystems : array of PSolarSystem; SolarSystemCount : integer; constructor Create; procedure addSolarSystem(Fx, Fy: Int64; planetCount: integer); end; TEntity = class(TObject); TSolarSystem = class(TEntity) public X, Y : Int64; constructor Create; procedure init(Fx, Fy: Int64; planetsTotal: integer); end; implementation constructor TUniverse.Create; begin inherited; Width := 10000; Height := 10000; SetLength(SolarSystems, 10); SolarSystemCount := 0; end; procedure TUniverse.addSolarSystem(Fx, Fy: Int64; planetCount: integer); begin SolarSystems[SolarSystemCount] := @TSolarSystem.Create; SolarSystems[SolarSystemCount].init(Fx, Fy, planetCount); inc(SolarSystemCount); end; constructor TSolarSystem.Create; begin inherited; end; procedure TSolarSystem.init(Fx, Fy: Int64; planetsTotal: integer); begin X := Fx; <----- HIER DIE ZURGIFFSVERLETZUNG !!! Y := Fy; SetLength(Planets, planetsTotal); planetCount := 0; end; end. Und aufgerufen wird so:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var u : TUniverse; begin u := TUniverse.Create; u.addSolarSystem(0, 0, 5); end; Simple Frage: Warum knallts? Vielen Dank im Voraus, dizzy |
Re: "array of Pointer" und eine Zugriffsverletzung
Zitat:
Mit
Delphi-Quellcode:
hast du bereits einen Zeiger. Mit
var x: TSolarSystem;
Delphi-Quellcode:
hast du also einen Zeiger auf einen Zeiger auf ein TSolarSystem Objekt.
var x: ^TSolarSystem;
|
Re: "array of Pointer" und eine Zugriffsverletzung
Hi!
SolarSystems ist ein array of PSolarSystem (= ^TSolarSystem). Daher kann ich ja leider nicht: SolarSystems[counter] := TSolarSystem.Create; aufrufen, sondern muss einen Zeiger (also Adresse) abliefern. Wobei das Create ja an sich bereits nur einen Zeiger abliefert, aber der Compiler meckert, dass TSolarSystem <> PSolarSystem (was ja an sich auch korrekt ist). Wie müsste ich umschreiben, dass etwas derartiges klappt? Holdrioh, dizzy |
Re: "array of Pointer" und eine Zugriffsverletzung
Mach aus dem PSolarSystem ein TSolarSystem. Oder hat das einen besondern Grund, warum du Zeiger auf Variablen vom Typ TSolarSystem in dem Array speichern willst?
|
Re: "array of Pointer" und eine Zugriffsverletzung
Vermutlich hast du früher C gelernt. Da braucht man Pointer auf Objekte.
Bei Delphi stellt eine Variable vom Typ TSolarSystem bereits einen Pointer auf das Objekt dar. Es besteht also keine Notwendigkeit für dein PSolarSystem. grüße, daniel |
Re: "array of Pointer" und eine Zugriffsverletzung
Ich habe öfters die Situation, dass sich dieKkatze in den Schwanz beissen würde.
Delphi-Quellcode:
Sowas in der Art.
type
POne = ^TOne; PTwo = ^TTwo; TOne = class(TObject) public Two : array of PTwo; end; TTwo = class(TObject) public One : POne; end; Und zum Zeitpunkt der Deklaration von TOne ist TTwo noch nicht bekannt. Also per Pointer. Würde ich anders herum deklarieren, wäre das Problem das selbe. Diese Problematik erwartet mich jetzt gleich mehrfach, und ich wollte gerne an möglichst allen Stellen so arbeiten, damit es einheitlicher wird. gruss, dizzy \\edit: @Sanchez: Nö, C ist mir nicht nur fremd, sondern gar Wiederlich. Nie wirklich was damit gemacht ;) |
Re: "array of Pointer" und eine Zugriffsverletzung
Delphi besitzt da so ein kleines Feature, dass sich class forward declaration nennt.
Delphi-Quellcode:
TSecondClass = class; // forward Deklaration
TFirstClass = class(TObject) private FField: TSecondClass; ... end; TSecondClass = class(TObject) private FField: TFirstClass; // oder auch was anderes je nach Nutzen ... end; |
Re: "array of Pointer" und eine Zugriffsverletzung
dann versuch doch mal das:
Delphi-Quellcode:
sollte der Katze den Schwanz aus dem Maul zerren :-) oder bin ich da auf'm falschen Dampfer?
type
TOne = class; TTwo = class; TOne = class(TObject) public Two : array of TTwo; end; TTwo = class(TObject) public One : TOne; end; Gruß |
Re: "array of Pointer" und eine Zugriffsverletzung
AH ... OOHH ...
:oops: hätte man wissen können... Dankeee! (puh, das hat meinen Abend gerettet!) Herzlich, dizzy |
Re: "array of Pointer" und eine Zugriffsverletzung
...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:53 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