AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi dynamische Array kopieren (letztes Element fehlt)
Thema durchsuchen
Ansicht
Themen-Optionen

dynamische Array kopieren (letztes Element fehlt)

Ein Thema von brainless · begonnen am 7. Mär 2010 · letzter Beitrag vom 26. Sep 2018
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von brainless
brainless

Registriert seit: 7. Mär 2010
Ort: Fürstenwalde / Cottbus
6 Beiträge
 
Delphi 7 Personal
 
#1

dynamische Array kopieren (letztes Element fehlt)

  Alt 7. Mär 2010, 10:39
hallo,

ich arbeite seit kurzem mit dynamischen Arrays (vorher immer mit statischen) - also bin Anfänger - und nun wollte ich ein komplettes Array in ein anderes kopieren. Mein erster Ansatz mit:
Delphi-Quellcode:
procedure TForm_liste.BtnSortClick(Sender: TObject);
var i, j: Integer;
// ...
    dynArray1: array of TIrgendwas;
    dynArray2: array of TIrgendwas;
begin

  SetLength(dynArray1, 200); //Länge des dynArray's
  SetLength(dynArray2, 200); //Länge des dynArray's

// irgendwelche Werte werden dynArray1 zugewiesen ...

    FOR i := 1 TO high(dynArray1) DO
     begin
      dynArray2[i] := dynArray1[i];
     end;
hat nicht funktioniert..
habe dann gegooglet und die Funktion Copy(dynArray) gefunden:
Delphi-Quellcode:
    // Array kopieren
    dynArray2 := Copy(dynArray1, 0, high(dynArray1));
wenn ich dann aber die beiden Arrays mit:
Delphi-Quellcode:
    FOR i := 1 TO high(dynArray1) DO
     begin
      ShowMessage(dynArray1[i].textinhalt + ' vs. ' + dynArray2[i].textinhalt);
     end;
vergleiche, dann steht beim letzten Element immer "text123 vs. [komische Zeichen]"

also scheinbar wird das letzte Element nicht kopiert ?!

hat jemand ein Tipp, was ich falsch mache?
oder eine andere/bessere Möglichkeit dyn. Arrays zu kopieren? (aber muss eine richtige Kopie sein, nicht nur Reference)
~.~ mfg
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: dynamische Array kopieren (letztes Element fehlt)

  Alt 7. Mär 2010, 10:43
dynamische Arrays beginnen immer bei 0. Ein dynamisches Array mit 3 Elementen geht also von yourarray[0] bis yourarray[2]

[Edit]
Herzlich Willkommen in der Delphi-Praxis
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von brainless
brainless

Registriert seit: 7. Mär 2010
Ort: Fürstenwalde / Cottbus
6 Beiträge
 
Delphi 7 Personal
 
#3

Re: dynamische Array kopieren (letztes Element fehlt)

  Alt 7. Mär 2010, 10:53
(hatte oben noch einen kleinen Fehler drin bei der ersten FOR-Schleife)

Zitat von SirThornberry:
Herzlich Willkommen in der Delphi-Praxis
danke

Zitat von SirThornberry:
dynamische Arrays beginnen immer bei 0. Ein dynamisches Array mit 3 Elementen geht also von yourarray[0] bis yourarray[2]
ja aber high(dynArray1) müsste doch dann genau das letzte Element erwischen ,oder?
also im Prinzip wird bei mir oben doch nur überall das erste Element (yourarray[0]) übersprungen? bzw. bleibt leer

das erlkärt noch nicht das Fehlen des letzten Element ,oder?
~.~ mfg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#4

Re: dynamische Array kopieren (letztes Element fehlt)

  Alt 7. Mär 2010, 10:57
Es gibt zwar eine Refferenzzählung bei dynamischen Arrays, welche manchmal ihre Probleme hat.
Sonst würde man mit Folgendem keine Probleme haben.
dynArray2 := dynArray1; Vorallem wird "leider" nicht vor dem Zuweisen eines Wertes geprüft, ob es eine Singleinstanz ist und somit werden die Werte direkt und somit auch aller gleichen Instanzen geändert.

dynArray2 := Copy(dynArray1); sorgt dafür, daß es danach eine Einzelinstanz ist.
Sowas wie UniqueString gibt es leider nur für Strings (welche allerdings auch "nur" 'ne Sonderform von dynamischen Char-Arrays sind.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von brainless
brainless

Registriert seit: 7. Mär 2010
Ort: Fürstenwalde / Cottbus
6 Beiträge
 
Delphi 7 Personal
 
#5

Re: dynamische Array kopieren (letztes Element fehlt)

  Alt 7. Mär 2010, 11:11
dynArray2 := dynArray1; dann bekomme ich die folgende Fehlermeldung:
Zitat:
[Fehler] Uliste.pas(301): Inkompatible Typen
obwohl beide Arrays vom selben Typ sind: (siehe 1. Beitrag)
Delphi-Quellcode:
procedure TForm_liste.BtnSortClick(Sender: TObject);
var i, j: Integer;
// ...
    dynArray1: array of TIrgendwas;
    dynArray2: array of TIrgendwas;
begin
~.~ mfg
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: dynamische Array kopieren (letztes Element fehlt)

  Alt 7. Mär 2010, 11:15
Nein, sind sie nicht.
Delphi-Quellcode:
type
  TMyDynArray = array of Integer;

var
  dynarray1: TMyDynArray;
  dynarray2: TMyDynArray;
Jetzt sind sie vom gleichen Typ.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#7

Re: dynamische Array kopieren (letztes Element fehlt)

  Alt 7. Mär 2010, 11:17
Delphi ist da sehr strikt und es sind zwar ähnliche, aber nicht die selben Typen.

var dynArray1, dynArray2: array of TIrgendwas;
Delphi-Quellcode:
type TIrgendwasArray = array of TIrgendwas;
var dynArray1, dynArray2: TIrgendwasArray;
Delphi-Quellcode:
type TIrgendwasArray = array of TIrgendwas;
var dynArray1: TIrgendwasArray;
  dynArray2: TIrgendwasArray;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#8

Re: dynamische Array kopieren (letztes Element fehlt)

  Alt 7. Mär 2010, 11:25
Der Befehl copy kopiert meines Wissens nicht von x bis y sondern ab x soundsoviel Elemente. Also müsste es
dynArray2 := Copy(dynArray1, 0, Length(dynArray1)); lauten, damit alle Elemente kopiert werden, oder?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: dynamische Array kopieren (letztes Element fehlt)

  Alt 7. Mär 2010, 11:33
Nicht Length()-1?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von brainless
brainless

Registriert seit: 7. Mär 2010
Ort: Fürstenwalde / Cottbus
6 Beiträge
 
Delphi 7 Personal
 
#10

Re: dynamische Array kopieren (letztes Element fehlt)

  Alt 7. Mär 2010, 11:35
Zitat von samso:
Der Befehl copy kopiert meines Wissens nicht von x bis y sondern ab x soundsoviel Elemente. Also müsste es
dynArray2 := Copy(dynArray1, 0, Length(dynArray1)); lauten, damit alle Elemente kopiert werden, oder?
jap das stimmt
aber selbst wenn ich High(...)+1 nehme (was ja dann das selbe wie Length(...) ist, fehlt das letzte Element

-----

ich dachte immer, dass das:
var dynArray1, dynArray2: TIrgendwasArray;
das selbe wie das ist:
dynArray1: array of TIrgendwas;
dynArray2: array of TIrgendwas;



okay wenn ich jetzt dynArray2 := dynArray1; benutze, sind alle dynArrayX[i].textinhalt aufeinmal leer?

Edit: hmm habe 1 und 2 verwechselt .. okay danke es klappt
~.~ mfg
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 09:25 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