AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Array of XY löschen

Ein Thema von Mavarik · begonnen am 27. Aug 2012 · letzter Beitrag vom 28. Aug 2012
Antwort Antwort
Seite 2 von 2     12   
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#1

AW: Array of XY löschen

  Alt 27. Aug 2012, 16:04
Delphi-Quellcode:
var
  A,B ; array of byte
begin
  Setlength(A,3);

  B := A; // Kopiert den Pointer und nicht den Inhalt, oder?
end;
Ja. Sobald aber...
Delphi-Quellcode:
var
  A,B ; array of byte
begin
  Setlength(A,3);

  B := A;
  A[0] := $FF; // <---- ...das hier passiert...
end;
...wird der Inhalt "nachträglich" kopiert. (Stichwort: Copy-On-Write) Ab dann sind auch die Referenzen unterschiedlich.

Das aber nur am Rande.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Array of XY löschen

  Alt 27. Aug 2012, 17:37
Zitat:
Delphi-Quellcode:
var
  A,B : AnsiString;

begin
  A := 'Cool';
  B := A;
  A := 'UnCool';

  Writeln(B); //Cool
end;
Zuweisungen auf den kompleten Inhalt sind etwas Anderes.
Das funktioniert auch bei (einfachen) dynamischen Arrays ordnungsgemäß.
Delphi-Quellcode:
var
  A, B: array ob Byte;

SetLength(A, 3);
A[0] := 123;
A[1] := 456;
A[2] := 798;

B := A;

SetLength(B, 3); // SetLength oder Copy macht B unique und A wird nicht mehr verändert
B[0] := 111;
B[1] := 963;
B[2] := 111;

ShowMessage(IntToStr(A[1])); // 456
ShowMessage(IntToStr(B[1])); // 963
Aber zugriffe auf den Inhalt funktionieren eben nicht richtig ... jedenfalls nicht so, wie man es sich denken würde.
Delphi-Quellcode:
var
  A, B: array ob Byte;

SetLength(A, 3);
A[0] := 132;
A[1] := 456;
A[2] := 798;

B := A;

B[1] := 963;

ShowMessage(IntToStr(A[1])); // hier würde man ja 456 erwarten, aber erhält 963
ShowMessage(IntToStr(B[1])); // 963
Und hier das selbe Beispiel, nur eben mit einem String.
Delphi-Quellcode:
var
  A, B: string;

A := 'abc';

B := A;

B[2] := 'x';

ShowMessage(A[2] + ' - ' + A); // b - abc
ShowMessage(B[2] + ' - ' + B); // x - axc
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Array of XY löschen

  Alt 27. Aug 2012, 23:00
@himitsu
nur so am Rande, wie bekommst Du die Monsterwerte in ein Array of Byte?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 20:07 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