Hi, ich hab ein Problem, und zwar crasht die unten folgende Procedure mit der Meldung "Lesefehler in Adresse...", wenn ich versuche der Stringlist im record List einen string hinzuzufügen(habs auch mit add('muh') versucht -> gleiches Resultat.)
Ich verstehe jedoch nicht warum, da das erhöhen der anzahl im Record List in der darauffolgenden Zeile funktioniert. Für mich macht es den Anschein, alls ob die Stringlist im Record nicht initialisiert wäre, jedoch initialisieren sich delphi-eigene-Klassen doch selbst, oder?
Merkwürdig ist auch, das zIndex = 4 ist (direkt nachdem er in die Procedure reingegangen ist). Jedoch verwendet er in den Puntearray[...]-zeilen den Index korrekt, also zwischen 1-3, was man durch die zuordnung der Ergebnisse ins netzarray zu erkennen ist. Wenn ich die Procedure durchgehe hat zIndex die Werte 4-1, also er fängt bei 4 an und geht dan runter.
Hoffe irgendeiner kann mir hier helfen. Auch ein Listarray[Listcount].Punkt.Create; konnte nicht helfen.
sry für den etwas unübersichtlichen Code, wollte ihn aber so posten, wie er zur Zeit ist, falls ich irgendetwas übersehen hab.
Delphi-Quellcode:
const
max = 10;
type TPunkt = record
Punkt : TPoint;
linked : boolean;
bindung : array[0..3] of integer;
vor : integer;
end;
type List = record
Anzahl : integer;
Punkt : TStringlist;
end;
var
Netzarray : array [0..max,0..max] of Single;+
Punktearray : array[0..max] of TPunkt;
Listarray : array[0..max] of List;
anzahl : integer;
Listcount : integer;
Delphi-Quellcode:
Aufruf:
procedure TForm1.Button3Click(Sender: TObject);
begin
abstand(0);
end;
Delphi-Quellcode:
function abstand(zPunkt:integer):single;
var zIndex : integer;
begin
for zIndex := 0
to 3
do //abstand Punkt - Bindung
if (Punktearray[zPunkt].bindung[zIndex] <> -1)
then
begin
if (netzarray[zPunkt,Punktearray[zPunkt].bindung[zIndex]] = -1)
then
begin
netzarray[zPunkt,Punktearray[zPunkt].bindung[zIndex]] := sqrt(sqr(Punktearray[zPunkt].punkt.x - Punktearray[ Punktearray[zPunkt].bindung[zIndex] ].Punkt.x) + sqr(Punktearray[zPunkt].punkt.x - Punktearray[ Punktearray[zPunkt].bindung[zIndex] ].Punkt.x));
netzarray[ Punktearray[zPunkt].bindung[zIndex] , zPunkt ] := netzarray[zPunkt,Punktearray[zPunkt].bindung[zIndex]];
//Wenn ich die nachfolgende Zeile rausnehme klappt das ganze, andernfalls AV.
Listarray[Listcount].Punkt.Add(inttostr(Punktearray[zPunkt].bindung[zIndex]));
inc(Listarray[Listcount].anzahl);
form1.ListBox1.Items.Add (inttostr(zPunkt)+'
|'+inttostr(Punktearray[zPunkt].bindung[zIndex])+'
: '+floattostr(netzarray[zPunkt,Punktearray[zPunkt].bindung[zIndex]]));
Punktearray[zPunkt].linked := true;
end;
//Abruchbedingung
if ( Punktearray[ Punktearray[zPunkt].bindung[zIndex]].linked = false )
then
abstand(Punktearray[zPunkt].bindung[zIndex])
else
inc(Listcount);
end;
end;