Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi for-Schleife und Zeiger führen zu komischem Problem (https://www.delphipraxis.net/44733-schleife-und-zeiger-fuehren-zu-komischem-problem.html)

Giiram 23. Apr 2005 17:47


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:
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;
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.

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;

Muetze1 23. Apr 2005 17:52

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

Giiram 23. Apr 2005 18:29

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