![]() |
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?
|
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 |
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. |
AW: Dynamisches Array
Das finde ich jetzt etwas merkwürdig, aber meinetwegen.
|
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:
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
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. |
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. |
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:
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.
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 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 by Thomas Breitkreuz