AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi 2 Arrays definiert - im Endeffekt aber ein und das selbe?
Thema durchsuchen
Ansicht
Themen-Optionen

2 Arrays definiert - im Endeffekt aber ein und das selbe?

Ein Thema von Nonsense · begonnen am 5. Apr 2004 · letzter Beitrag vom 5. Apr 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#1

2 Arrays definiert - im Endeffekt aber ein und das selbe?

  Alt 5. Apr 2004, 18:21
Hallo,
ich habe 2 Arrays definiert:
Delphi-Quellcode:
  TWorldArray = array of array of TCreature;

  TWorld = class(TObject)
  private
    [...]
    FBufferArray: TWorldArray;
    FWorldArray : TWorldArray;
    [...]
  end;
Durch auftauchende Zugriffsverletzungen habe ich aber das Gefühl, dass es sich hierbei um ein und das selbe handelt (FBufferArray = FWorldArray).
Stimmt das?
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: 2 Arrays definiert - im Endeffekt aber ein und das selbe

  Alt 5. Apr 2004, 18:42
Eigentlich sollten es beide Zeiger auf verschiedene Arrays sein...
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
gekmihesg
(Gast)

n/a Beiträge
 
#3

Re: 2 Arrays definiert - im Endeffekt aber ein und das selbe

  Alt 5. Apr 2004, 18:43
vielleicht beachtest du ja irgendwo nicht das es dynamische arrays sind...
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#4

Re: 2 Arrays definiert - im Endeffekt aber ein und das selbe

  Alt 5. Apr 2004, 18:47
@Chewie: Das dachte ich mir auch. Wenn ich jetzt aber eine Instanz (von TCreature) von meinem FWorldArray in das FBufferArray kopiere, z.B.:
FBufferArray[X + 1][Y + 1] := FWorldArray[X][Y]; und dann FWorldArray (!) grafisch ausgebe, wird auch die Kopie bei X+1 und Y+1 ausgeben.
Der Destruktor gibt zum Schluß dann auch eine AV aus.

@gekmihesg: Die beiden Arrays sind genau gleich, d.h. sie haben die gleiche Größe, welche sich auch nicht ändert.
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#5

Re: 2 Arrays definiert - im Endeffekt aber ein und das selbe

  Alt 5. Apr 2004, 18:53
Das Problem ist jetzt, dass ich es wissen muss, ob FWorldArray und FBufferArray auf das gleiche Array zeigen. Wenn dem so ist, müsste ich alle Prozeduren umschreiben, da ja dann TWorldArray != TBufferArray wäre.
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#6

Re: 2 Arrays definiert - im Endeffekt aber ein und das selbe

  Alt 5. Apr 2004, 19:04
Ich habe noch einmal ein Bisschen rumgespielt und kann jetzt sagen, dass beide definitiv auf das selbe Array zeigen. Hat jemand eine Idee, wie ich das umgehen kann? Bleibt mit da nur die Möglichkeit, ein 2. Array zu erstellen? Bsp:
Delphi-Quellcode:
  TBufferArray = array of array of TCreature;
  TWorldArray = array of array of TCreature;

  TWorld = class(TObject)
  private
    [...]
    FBufferArray: TBufferArray;
    FWorldArray : TWorldArray;
    [...]
  end;
Das muss doch einfacher gehen, verdammte Sche*ße.
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#7

Re: 2 Arrays definiert - im Endeffekt aber ein und das selbe

  Alt 5. Apr 2004, 19:31
auf seine eigenen antworten sollte man innerhalb von 24 nicht antworten, editier doch deinen beitrag nächstes mal. So sind hier eben die Regeln

zum thema kann ich leider auch nichts sagen :\
Mario
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#8

Re: 2 Arrays definiert - im Endeffekt aber ein und das selbe

  Alt 5. Apr 2004, 19:43
Zitat von Pseudemys Nelsoni:
auf seine eigenen antworten sollte man innerhalb von 24 nicht antworten, editier doch deinen beitrag nächstes mal. So sind hier eben die Regeln

zum thema kann ich leider auch nichts sagen :\
War einfach zu faul.
Ich merk's mir.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: 2 Arrays definiert - im Endeffekt aber ein und das selbe

  Alt 5. Apr 2004, 20:06
Ich hab das jetzt auch mal ausprobiert, ausgehend von deiner ersten Deklaration:

Delphi-Quellcode:
with TWorld.Create do
  begin
    //uninitialisiert
    ShowMessage(Format('FBufferArray: %p, FWorldArray: %p', [FBufferArray, FWorldArray]));

    //auf Länge 1
    SetLength(FBufferArray, 1);
    SetLength(FWorldArray, 1);
    ShowMessage(Format('FBufferArray: %p, FWorldArray: %p', [FBufferArray, FWorldArray]));

    Free;
  end;
Ergebnis: Ist das Array noch nicht initialisiert, zeigen beiden wirklich auf die selbe Adresse, nämlich 0! Klar, sind ja auch nil-Pointer. Erst nach dem Festlegen der Länge zeigen sie wirklich auf verschiedene Adressen, zumindest bei mir (D5).
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#10

Re: 2 Arrays definiert - im Endeffekt aber ein und das selbe

  Alt 5. Apr 2004, 20:13
Mehr als komisch, mein Contructor:
Delphi-Quellcode:
  TWorldArray = array of array of TCreature;

  TWorld = class(TObject)
  private
    FBufferArray: TWorldArray;
    FWorldArray : TWorldArray;
  public
    constructor Create(BlockNumX, BlockNumY, BlockHeight, BlockWidth: Integer);
    destructor Destroy; override;
    [...]
    procedure BufferCreature(SourceX, SourceY, TargetX, TargetY: Integer;
      BufferArray, WorldArray: TWorldArray);
    [...]
    property BufferArray: TWorldArray read FWorldArray;
    property WorldArray: TWorldArray read FWorldArray;
  end;

[...]

constructor TWorld.Create(BlockNumX, BlockNumY, BlockHeight,
  BlockWidth: Integer);
var
  i: Integer;
  j: Integer;
begin
  [ ... ]

  SetLength(FBufferArray, BlockNumX, BlockNumY);
  SetLength(FWorldArray, BlockNumX, BlockNumY);

  for i := 0 to FBlockNumX - 1 do
    for j := 0 to FBlockNumY - 1 do
    begin
      FBufferArray[i][j] := TSand.Create(i, j);
      FWorldArray[i][j] := TSand.Create(i, j);
    end;
end;
Vielleicht liegt es an der Zuweisung?
Delphi-Quellcode:
procedure TWorld.BufferCreature(SourceX, SourceY, TargetX, TargetY: Integer;
  BufferArray, WorldArray: TWorldArray);
begin
  BufferArray[TargetX][TargetY] := WorldArray[SourceX][SourceY];
end;
(Ich wollte jetzt zu 100% sicher gehen und habe die Arrays mit übergeben. Es ist natürlich klar, dass ich nur die Instanz der Klasse übergeben müsste, da ich ja per properties auf die Arrays zugreifen könnte.)
Würde bei dieser Zuweisung wirklich eine Kopie erstellt werden?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:36 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