Einzelnen Beitrag anzeigen

Giiram

Registriert seit: 10. Dez 2004
7 Beiträge
 
#1

for-Schleife und Zeiger führen zu komischem Problem

  Alt 23. Apr 2005, 17:47
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;
  Mit Zitat antworten Zitat