for-Schleife und Zeiger führen zu komischem Problem
Ich weiß, der Titel ist nicht so gut, aber ich weiß nicht wie ichs anders beschreiben soll.
Ich schreib grad an ner kleinen Partikelsimulation. Habe ich 3 Parikel funktioniert alles Problemlos. Mach ich ein 4. rein, bekomm ich fast sofort einen Fehler. Access violation at address 00456530 in module 'Partikel.exe'. Read of address 00000018. Hab dann mal mit Haltepunkten versucht den Fehler einzukreisen. In dieser for-Schleife ist das Problem.
Delphi-Quellcode:
Erster Schleifendurchlauf ganz normal. Beim zweiten durchlauf ist C1 wie es sich gehört 1 und FPartikelList[C1] (Zeiger auf nen anderes Partikel) zeigt in der Watchlist auch die Richtige Speicheradresse, aber nach der Zuweisung von q ist C1 plötzlich wieder 0 und auch q hat den Wert vom ersten Schleifendurchlauf und nicht den, welchen es jetzt haben sollte.
for C1 := 0 to High(FPartikelList) do
begin q := FPartikelList[C1].Fp; Fges := 1000 / (Sqr(q.X - Fp.X) + Sqr(q.Y - Fp.Y)); ... end; Bei 3 Partikeln gehts bei 4 nicht. Habt ihr vielleicht ne Ahnung woran das liegen könnte? Hier noch die Typen- und Klassendefinitionen:
Delphi-Quellcode:
TVector = record
X, Y: Real; end; PImage = ^TImage; PPartikel = ^TPartikel; TPartikel = class private Fp, Fv: TVector; FImage: PImage; FPartikelList: Array of PPartikel; public constructor Create(p: TVector; Image: PImage); function Vec(X, Y: Real): TVector; procedure Add(Partikel: PPartikel); procedure Refresh(t: Real); end; TPartikelMenge = class private FImage: PImage; FPartikelMenge: Array of TPartikel; public constructor Create(Image: PImage); procedure Add(p: TVector); procedure Refresh(t: Real); procedure Clear; destructor Destroy; end; |
Re: for-Schleife und Zeiger führen zu komischem Problem
Moin!
Nutze nicht PImage und PPartikel sondern direkt die Instanzen. Grund: Die Instanzenvariablen sind schon Zeiger. Jetzt hast du einen Zeiger auf einen Zeiger, der macht da leicht mal Probleme. MfG Muetze1 |
Re: for-Schleife und Zeiger führen zu komischem Problem
Danke!
Hab mit Zeigern noch nicht so viel Erfahrung und da es ja tlw. geklappt hat, wäre ich da selbst nie im Leben drauf gekommen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 Uhr. |
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