AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Problem mit Stringlist in Record

Ein Thema von Thorben86 · begonnen am 16. Feb 2006 · letzter Beitrag vom 17. Feb 2006
Antwort Antwort
Thorben86

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

Problem mit Stringlist in Record

  Alt 16. Feb 2006, 23: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
Benutzerbild von matthiasl
matthiasl

Registriert seit: 30. Okt 2003
Ort: Nienburg
14 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Problem mit Stringlist in Record

  Alt 17. Feb 2006, 02:16
Hi,

dir ist hoffentlich klar, daß eine Variable vom Typ "TStringList" ein Zeiger auf eine Objekt-Struktur ist, die man erst Anlegen muß.

Im Gegensatz zu einem "Array[0..50] of String", muß man z.B. ein "Array of String" mit dem Befehl "SetLength" erst initialisieren. Eine Variable wie "xx:TStringList" muß man erst mit "xx:=tStringList.Create;" einrichten.

...und wenn man nicht ein großes Speicherproblem haben möchte, muß man eine StringList (im Gegensatz zu einem Array) nach dem letzten Gebrauch auch wieder Freigeben mit "xx.Free;".

War das hilfreich?
  Mit Zitat antworten Zitat
Thorben86

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

Re: Problem mit Stringlist in Record

  Alt 17. Feb 2006, 13:24
Danke, so geht es.

Wobei ich allerdings immer noch nicht verstehe, warum der eine Laufvariable, die man verwendet, runterlaufen lässt, da intern die Variable so ja 2 mal vorhanden sein müsste, womit der Effekt des überprüfens auf nil nicht mehr vorhanden wäre?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:20 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