Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dynamisches Array (https://www.delphipraxis.net/154241-dynamisches-array.html)

DeddyH 2. Sep 2010 18:41

AW: Dynamisches Array
 
Stepp doch einfach mal durch und schau, wann der Fehler auftritt. Wir kennen ja nur Bruchteile des Codes, was sollen wir denn sagen?

Lotus 2. Sep 2010 18:44

AW: Dynamisches Array
 
Der Fehler tritt nur auf, wenn ich das Programm schließe, also IN der Destroy.. weiterhin setzt mir Delphi auch den Curser in die FormDestroy, also sollte auch dort der Fehler sein oder nicht?

Edit:
Kommentiere ich die Zeile Objectlist.free aus, dann kommt der Fehler auch nicht

alzaimar 2. Sep 2010 18:48

AW: Dynamisches Array
 
Ich tipp mal darauf, das in der Objektliste schon freigegebene Instanzen sind.

Beim Freigeben der Objektliste werden die in der Liste befindlichen Objekte nochmals freigegeben, sofern die Eigenschaft 'OwnsObjects' auf True gesetz ist.

DeddyH 2. Sep 2010 18:50

AW: Dynamisches Array
 
Das finde ich jetzt etwas merkwürdig, aber meinetwegen.

Lotus 2. Sep 2010 18:55

AW: Dynamisches Array
 
Ah, das bedeutet ich muss sie also nicht mehr freigeben? Sehr gut :)

Das mit dem Array hab ich jetzt schon ein wenig genauer lokalisieren können..
Mein jetziges Problem ist "glaube" ich, dass die Procedure irgendwie nur Call by Value ist...?!?

Ich hab jetzt mal fix nen ganz billiges Beispiel gemacht:

Delphi-Quellcode:
unit test;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  myArray : array[0..3] of integer;

implementation

{$R *.dfm}

procedure fill_array(ta:array of integer; wert:integer);
var i:integer;
begin
for i:=low(ta) to high(ta) do
ta[i]:=wert;
end;

procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
fill_array(myArray,2);
for i:=low(myarray) to high(myarray) do
Form1.Memo1.Text:=Form1.Memo1.Text+ ' ' +(inttostr(myArray[i]));
end;

end.
In der Memo1 steht dann 4x 0! Und keine 2.. Wie kann man das umgehen? Global "kann" ich nicht auf das Array zugreifen, die ich die procedure ja für mehrere Arrays benutzen möchte, sonst müsste ich ja immer wieder eine neue procedure schreiben für jedes array

rapante 2. Sep 2010 19:23

AW: Dynamisches Array
 
versuchs mal so, dann ersparst du dir auch die globale Variable...
Delphi-Quellcode:
unit test;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TMyArray = array[0..3] of integer;

  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure fill_array(var ta: TMyArray; wert:integer);
var i:integer;
begin
for i:=low(ta) to high(ta) do
ta[i]:=wert;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i:integer;
  MyArray: TMyArray;
begin
fill_array( myArray,2);
for i:=low(myarray) to high(myarray) do
Form1.Memo1.Text:=Form1.Memo1.Text+ ' ' +(inttostr(myArray[i]));
end;

end.

Lotus 2. Sep 2010 21:39

AW: Dynamisches Array
 
Ja das klappt, aber wieso klappt das nicht bei meinem richtigen Projekt? Ich habs genau so!

Ich versuch jetzt mal die nötigen Infos zu posten:

Delphi-Quellcode:
type
TKarte = record
            KartenName : string[12]; //Sieben, Acht, Neun, Zehn, Bube, Dame, König, Ass
            KartenWert : Byte; //zur Bestimmung des Indexes beim Array
            KartenZiffer : Byte; //Zur Namens - Bildauflösung B=11, D=12 K=13 Ass=1
            KartenTyp : Byte; //Karo (1), Herz(2), Pik(3), Kreuz(4)
            end;

TKartenArray = array[0..6] of TKarte;

var KartenGezogen : TKartenArray;


procedure cardToArray(karte:TKarte; TKA:TKartenArray; laenge:integer);
begin
TKA[laenge]:=karte;
end;

procedure CardToPlayer();
var i,zahl : byte;
begin
for i:=low(Player) to players-1 do begin
  cardToArray(Player[i].HandKarte[1],KartenGezogen,0);
  cardToArray(Player[i].HandKarte[2],KartenGezogen,1);
  end;
Form1.Memo1.Text:=KartenGezogen[0].KartenName;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
CardToPlayer();
end;
So, mein Problem ist, er übergibt in der procedure cardToArray "korrekt" die Karte an TKA, allerdings ist sie danach trotzdem NICHT in dem Array KartenGezogen ... was man anhand der memo1 nachvollziehn kann.. Das ist exakt dasselbe Schema wie bei dem Array, wo wir das mit der 2 gefüllt haben, nur etwas komplexer.. ich versteh's nicht warum der das nicht in das Array schreibt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:35 Uhr.
Seite 4 von 4   « Erste     234   

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