Autor |
Beitrag |
Xion
![Xion hat insgesamt 90.8% On-Topic und 9.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Xion hat insgesamt 90.8% On-Topic und 9.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Xion hat insgesamt 90.8% On-Topic und 9.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Xion hat insgesamt 90.8% On-Topic und 9.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Xion hat insgesamt 90.8% On-Topic und 9.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Xion hat insgesamt 90.8% On-Topic und 9.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Xion hat insgesamt 90.8% On-Topic und 9.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png)
![EE-Maler EE-Maler](graphics/ranks/maler.png)
Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Di 22.04.14 18:02
Da fallen mir mehrere Möglichkeiten ein:
![:arrow:](images/smiles/icon_arrow.gif) Du benutzt einen Zeiger auf den Zeiger. Dann steckt hinter dem zeiger entweder das Objekt oder nil. Alle Zeiger zeigen dann auf das nil.
![:arrow:](images/smiles/icon_arrow.gif) Du machst ein Record mit Spielfeld und SpielfeldExists. Darauf hast du deine Pointer (das ist so ungefähr das selbe wie der vorherige Punkt ![;)](images/smiles/icon_wink.gif) )
![:arrow:](images/smiles/icon_arrow.gif) Du machst deine Klasse als Singleton und benutzt eine class function zum Test, ob die Instanz existiert. Dann kannst du aber immer nur ein Spielfeld haben!
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
IhopeonlyReader ![Threadstarter Threadstarter](./graphics/viewtopic/threadstarter.png)
![IhopeonlyReader hat insgesamt 96.6% On-Topic und 3.4% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![IhopeonlyReader hat insgesamt 96.6% On-Topic und 3.4% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![IhopeonlyReader hat insgesamt 96.6% On-Topic und 3.4% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![IhopeonlyReader hat insgesamt 96.6% On-Topic und 3.4% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![IhopeonlyReader hat insgesamt 96.6% On-Topic und 3.4% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![IhopeonlyReader hat insgesamt 96.6% On-Topic und 3.4% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![IhopeonlyReader hat insgesamt 96.6% On-Topic und 3.4% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png)
Beiträge: 600
Erhaltene Danke: 23
Delphi 7 PE
|
Verfasst: Mi 23.04.14 12:06
ich mache das fast so wie du sagst Xion...
ich habe ja sowohl den gegnersockert als auch das spielfeld als pointer...
somit mache ich es so
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| -> Spieler.Gegner.Spielfeld := nil; -> Spieler.Spielfeld.Free; -> Spieler.Spielfeld := nil; |
_________________ Sucht "neueres" Delphi
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
|
|
Xion
![Xion hat insgesamt 90.8% On-Topic und 9.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Xion hat insgesamt 90.8% On-Topic und 9.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Xion hat insgesamt 90.8% On-Topic und 9.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Xion hat insgesamt 90.8% On-Topic und 9.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Xion hat insgesamt 90.8% On-Topic und 9.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Xion hat insgesamt 90.8% On-Topic und 9.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Xion hat insgesamt 90.8% On-Topic und 9.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png)
![EE-Maler EE-Maler](graphics/ranks/maler.png)
Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mi 23.04.14 14:56
Du könntest es in etwa so machen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| type TSpielfeld = class end; type PSpielfeld = ^TSpielfeld;
type TSpieler = record Spielfeld: ^PSpielfeld; end;
procedure RunTest; var spieler1, spieler2: TSpieler; ptrSpielfeld: PSpielfeld; begin Spielfeld^ := TSpielfeld.Create; spieler1.Spielfeld := @ptrSpielfeld; spieler2.Spielfeld := @ptrSpielfeld; ptrSpielfeld^.Free; ptrSpielfeld:= nil; if spieler1.Spielfeld^ <> nil then ShowMessage('Dieser Code funktioniert nicht wie Xion sich das vorstellt!'); end; |
Nicht vergessen: ptrSpielfeld wird ungültig bei Verlassen der Funktion, dies ist nur ein Test und wenn du das so einsetzen willst muss da der Pointer "global" hinterlegt werden. Man könnte ihn sogar ins Spielfeld integrieren und eine Funktion "getReference" oder so dafür schreiben. Ganz wie man möchte.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
jaenicke
![jaenicke hat insgesamt 87.9% On-Topic und 12.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![jaenicke hat insgesamt 87.9% On-Topic und 12.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![jaenicke hat insgesamt 87.9% On-Topic und 12.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![jaenicke hat insgesamt 87.9% On-Topic und 12.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![jaenicke hat insgesamt 87.9% On-Topic und 12.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![jaenicke hat insgesamt 87.9% On-Topic und 12.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![jaenicke hat insgesamt 87.9% On-Topic und 12.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png)
Beiträge: 19277
Erhaltene Danke: 1741
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 24.04.14 06:17
In der ersten Zeile meinst du vermutlich ptrSpielfeld^ und nicht Spielfeld^, oder?
Trotzdem ist das falsch. Denn das Ziel des Pointers ist nicht initialisiert, so dass da einfach irgendwelcher Speicher überschrieben wird...
Der Speicher muss in so einem Fall explizit, z.B. mit GetMem, initialisiert werden oder eine Variable als Ziel benutzt werden, auf die der Pointer zeigt (ich vermute mal du hattest letzteres im Sinn).
Die ganze Pointerspielerei halte ich aber ohnehin für wenig sinnvoll. Mit Interfaces kann man das auch erreichen. Wenn man das Spielfeld wirklich gezielt zerstören möchte, kann man ein Interface nutzen, in dem der Pointer liegt.
Viel sinnvoller ist aber vermutlich das Spielfeld einfach direkt als Pointer umzusetzen, damit jeder darauf so lange zugreifen kann wie er es braucht. Selbst wenn die visuelle Darstellung schon nicht mehr existiert, kann das Spielfeld dahinter ja noch weiter leben um z.B. die Endstände noch abrufen zu können.
Für diesen Beitrag haben gedankt: Xion
|
|
Xion
![Xion hat insgesamt 90.8% On-Topic und 9.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Xion hat insgesamt 90.8% On-Topic und 9.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Xion hat insgesamt 90.8% On-Topic und 9.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Xion hat insgesamt 90.8% On-Topic und 9.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Xion hat insgesamt 90.8% On-Topic und 9.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Xion hat insgesamt 90.8% On-Topic und 9.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Xion hat insgesamt 90.8% On-Topic und 9.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png)
![EE-Maler EE-Maler](graphics/ranks/maler.png)
Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Do 24.04.14 13:34
Oh, danke für die Korrektur.
Habs eben mal ausprobiert, es war viel zu kompliziert gedacht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var spieler1, spieler2: TSpieler; ptrSpielfeld: PSpielfeld; Spielfeld: TSpielfeld; begin Spielfeld := TSpielfeld.Create; spieler1.Spielfeld := @Spielfeld; spieler2.Spielfeld := @Spielfeld; Spielfeld.Free; Spielfeld := nil; if spieler1.Spielfeld^ = nil then ShowMessage('Dieser Code funktioniert wie Xion sich das vorstellt!'); end; |
Hinter Spielfeld verbirgt sich natürlich bereits ein Pointer auf die eigentliche Struktur (deswegen ja auch call by reference, wenn man eine Klasse als Parameter übergibt). Sollte jetzt aber so passen, solange die variable Spielfeld global verwaltet wird.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
|