![]() |
Delphi-Version: 2006
Zeiger auf dynamisches Array
Hallo alle zusammen.
Ich zeige Euch erstmal den Quellcode:
Delphi-Quellcode:
Jetzt hätte ich dazu zwei Fragen:
type
TForm1 = class(TForm) Button1: TButton; Label1: TLabel; Label2: TLabel; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; TArrayList = array of array of integer; PArrayList = ^TArrayList; var Form1: TForm1; implementation {$R *.dfm} procedure modifyMatrix(list:PArrayList); Begin list^[2,4]:=5; end; procedure TForm1.Button1Click(Sender: TObject); var mylist:PArrayList; begin new(mylist); setLength(myList^,4,4); mylist^[0,5]:=3; modifyMatrix(myList); label1.Caption:=inttostr(mylist^[0,5]); label2.Caption:=inttostr(mylist^[2,4]); //dispose(mylist); end; 1. Mit setLength lege ich die Größe des dynamischen Arrays fest. Warum kann ich über dessen Grenzen hinaus trotzdem Werte ablegen? 2. Die kommentierte Zeile "dispose(mylist);" erzeugt einen Absturz. Warum? Danke |
AW: Zeiger auf dynamisches Array
Zitat:
Oder setze die entsprechenden Compilerschalter. Zitat:
Delphi-Quellcode:
Wenn nicht, dann stück für Stück die restlichen Zeilen einfügen und schauen wann's knallt.
new(mylist);
setLength(myList^,4,4); dispose(mylist); Und die Frage: Warum muß es unbedingt ein Pointer sein? Eventuell läßt es sich ja anders lösen. |
AW: Zeiger auf dynamisches Array
Schalte die Bereichsüberprüfung ein...
und warum greift Du über Zeiger zu, so geht es auch
Delphi-Quellcode:
procedure modifyMatrix(list:TArrayList);
Begin list[2,4]:=5; end; procedure TForm1.Button1Click(Sender: TObject); var mylist:TArrayList; begin setLength(myList,6,6); mylist[0,5]:=3; modifyMatrix(myList); label1.Caption:=inttostr(mylist[0,5]); label2.Caption:=inttostr(mylist[2,4]); end; |
AW: Zeiger auf dynamisches Array
Danke für die Antworten. Der Hinweis mit der Bereichsüberprüfung war sehr gut. Das hat es gebracht.
Ohne die Bereichsüberprüfung kam die Fehlermeldung "Ungültige Zeigeroperation", wenn ich dispose(mylist) ausführen und auf einen höheren Index zugreifen wollte, den es laut selLength garnicht gibt. Und zu der Frage, warum ich gerade diesen Ablauf wollte: Ziel ist es, daß ich eine lokale Variable (in diesem Fall ein zweidimensionales Array) durch eine andere Funktion ändern lassen kann. |
AW: Zeiger auf dynamisches Array
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 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