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;