![]() |
Dynamisches Array funktioniert nicht - Zugriffsverletzung
Hallo,
ich habe folgendes Array:
Delphi-Quellcode:
welches ich folgender Maßen füllen möchte:
Field : array of array of TFieldType;
// TFieldType ist ein record
Delphi-Quellcode:
Der Compiler zeigt mir _keine_ Fehler an.
// [...]
SetLength(Field, X - 1, Y - 1); // [...] for i := 0 to X - 1 do begin for j := 0 to Y - 1 do begin Field[j, i].Var := 1; end; end; Nach dem Starten, bekomme ich aber eine Zugriffsverletzung. (Compiler springt auf "Field[j, i].Var := 1;"). Wenn ich jetzt aber z.B.:
Delphi-Quellcode:
schreibe, geht es.
Field : array[0..29, 0..29] of TFieldType;
Wie kann ich nun ein dynamisches, 2-dimensionales Array nutzen? Danke im Voraus! :) |
Re: Dynamisches Array funktioniert nicht - Zugriffsverletzun
Hallo!
Wenn Du SetLength(myArray, laenge) machst, dann ist der höchste Index, auf den Du noch zugreifen kannst laenge-1. Liegt daran, dass man bei Null anfängt, zu zählen. Mfg Peter |
Re: Dynamisches Array funktioniert nicht - Zugriffsverletzun
Bei SetLength musst du schon die wirkliche Länge angeben:
Delphi-Quellcode:
Das würde das selbe wie array[0..x-1,0..y-1] bedeuten.
SetLength(Field, X, Y);
Außerdem gibts bei dir ne Zugriffsverletzung wenn x <> y, wegen der Zuweißung
Delphi-Quellcode:
Du musst entweder
Feld[j,i] := 1;
Delphi-Quellcode:
schreiben
Feld[i,j] := 1;
oder du musst die Schleifen abändern in
Delphi-Quellcode:
Du hast natürlich auch noch die Möglichkeit:
for i := 0 to Y - 1 do
begin for j := 0 to X - 1 do begin Field[j, i].Var := 1; end; end;
Delphi-Quellcode:
SetLength(Field, Y, X);
MfG Niels |
Re: Dynamisches Array funktioniert nicht - Zugriffsverletzun
Danke für eure Mühe, aber es hatte nichts geholfen. :cry:
Zu X und Y: Beides sind Werte von 1 bis ... Deshalb das "X - 1", bzw "Y - 1", da dass Array ja bei 0 anfängt zu zählen. |
Re: Dynamisches Array funktioniert nicht - Zugriffsverletzun
Hi,
hast du die erste Antwort von Peter nicht gelesen? :shock: Wenn, dann musst du schreiben
Delphi-Quellcode:
Das gleiche für j. Sonst greifst du auf eine Stelle im Speicher zu, die gar nicht zum Array gehört. Dann KANN es nur zu einer AV kommen.
for i:=0 to Y-2 do
Chris |
Re: Dynamisches Array funktioniert nicht - Zugriffsverletzun
@Chakotay1308: Das kann aber nicht hinhauen.
Die letzten Einträge bleiben dann leer (wegen "X - 2" und "Y - 2), soll heißen, ich bekomme eine Zugriffverletzung, da die Werte im Array nicht belegt sind. |
Re: Dynamisches Array funktioniert nicht - Zugriffsverletzun
Ich habs...*GD&R*...
Es lag am SetLength, richtig ist jetzt:
Delphi-Quellcode:
Danke @all!
SetLength(Field, X, Y);
[...] for i := 0 to Y - 1 do begin for j := 0 to X - 1 do begin Field[j, i].Var := 1; end; end; |
Re: Dynamisches Array funktioniert nicht - Zugriffsverletzun
Hi,
das hat doch "Niels" gemeint. ;) Chris |
Re: Dynamisches Array funktioniert nicht - Zugriffsverletzun
Ja, mein Hirn läuft noch mechanisch, da dauert das ein wenig, bis die Logik sich ausbreiten kann... :stupid:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 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