![]() |
Variable Arrays (mal wieder)
Hallo
Ich schreibe zu Demonstrationszwecken ein ein kleines Programm in dem ich den Schülern gerne (noch) Pointer vorenthalten würde. Mit einem variablen Array komme ich nicht so recht weiter. Zwar kann ich mit SetLength(Arrayname, x) eine Größe festsetzen nur leider kommen zur Laufzeit (rekursiv!) neue Elemente hinzu. Ein SetLength(Arrayname, x+1) löscht leider alle schon vorhandenen Einträge was auch sinn macht, ist schließlich eine neue "Deklaration". Das umkopieren mit ArraynameB := Copy(Arrayname); Setlength(Arrayname, x+1); Arrayname := Copy(ArraynameB) ist leider Performancemäßig unter aller .... :spin: Hat jemand einen Tip oder komme ich um Pointer nicht herrum? Danke Golem PS: Sorry wenn dieses Thema schon mal da war. Habe zwar einige Threads zu dyn Array gefunden aber nichts was recht zu meinem Problem passt. |
Re: Variable Arrays (mal wieder)
Zitat:
Der Vorteil von DynArrays ist ja, zur Laufzeit die Arraygröße festzulegen und sich nicht von vorherein auf eine feste Größe zu beschränken. Übrigens ist ein DynArray ein nettes Beispiel, wie Delphi die Zeiger "verschwinden" lässt, da ein DynArray rein aus Zeigern besteht. grez msch |
Re: Variable Arrays (mal wieder)
Hi
.was leider falsch ist. SetLength(Array,x+1) vergrößert das Array und löscht keine vorhandenen Einträge, lediglich beim Verkleinern verschwinden logischerweise die Einträge am Ende. Bei mir wird gelöscht. Habe es nochmal ausprobiert. Hier etwas Code:
Delphi-Quellcode:
Diese Procedure ist wirklich simpel und speichert eine Zug "von" - "nach" wobei mcount in der aufrufenden Procedur um eins erhöht wird.
type
mlist = record von : integer; nach : integer; schlag : boolean; end; movelist1 : array of mlist; procedure storemove(mcount : integer; von : integer; nach : integer; schlag : boolean); begin setlength(movelist1, mcount); // Dynamisches Array festlegen! movelist1[mcount].von := von; movelist1[mcount].nach := nach; movelist1[mcount].schlag := schlag; end; Gebe ich nach einem Durchlauf alle Züge "von nach" aus sind alle von "0" nach "0" ausser dem zuletzt erzeugten. Mache ich irgendetwas grundlegend falsch? Danke nochmal und Bye Golem [edit=Daniel B]Delphi-Tags eingefügt. Mfg, Daniel B[/edit] |
Re: Variable Arrays (mal wieder)
Hallo erst mal,
also bei Dynamischen Arrays hab ich es nicht das bei SetLenght(Name,x+1) die vorhandenen Daten gelöscht werden. Vieleicht solltest du dein SetLenght vor Procedureaufruf einmalig setzen, um einen zähler mehr als beim ersten aufruf der proceure benötigt wird. Gruß Jörg |
Re: Variable Arrays (mal wieder)
Hallo
Erstmal Danke allen, aber der Fehler lag doch bei mir. Hier ist das Problem:
Delphi-Quellcode:
Es muß logischerweise mcount-1 heißen da ein Setlength[movelist1,1] ein Element mit dem Indize 0 erzeugt. Anfängerfehler! :(
procedure storemove(mcount : integer; von : integer; nach : integer; schlag : boolean);
begin setlength(movelist1, mcount); // Dynamisches Array festlegen! movelist1[mcount-1].von := von; movelist1[mcount-1].nach := nach; movelist1[mcount-1].schlag := schlag; end; Thx again Golem |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz