Einzelnen Beitrag anzeigen

Thorben86

Registriert seit: 20. Nov 2003
Ort: Brühl
365 Beiträge
 
Delphi 2005 Personal
 
#1

Problem mit Stringlist in Record

  Alt 17. Feb 2006, 00:54
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;
  Mit Zitat antworten Zitat