AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Dynamisches Array funktioniert nicht - Zugriffsverletzung
Thema durchsuchen
Ansicht
Themen-Optionen

Dynamisches Array funktioniert nicht - Zugriffsverletzung

Ein Thema von Nonsense · begonnen am 29. Nov 2003 · letzter Beitrag vom 29. Nov 2003
Antwort Antwort
Benutzerbild von Nonsense
Nonsense

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

Dynamisches Array funktioniert nicht - Zugriffsverletzung

  Alt 29. Nov 2003, 18:29
Hallo,
ich habe folgendes Array:
Delphi-Quellcode:
Field : array of array of TFieldType;
// TFieldType ist ein record
welches ich folgender Maßen füllen möchte:
Delphi-Quellcode:
  // [...]
  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;
Der Compiler zeigt mir _keine_ Fehler an.
Nach dem Starten, bekomme ich aber eine Zugriffsverletzung. (Compiler springt auf "Field[j, i].Var := 1;").

Wenn ich jetzt aber z.B.:
Field : array[0..29, 0..29] of TFieldType; schreibe, geht es.
Wie kann ich nun ein dynamisches, 2-dimensionales Array nutzen?


Danke im Voraus!
  Mit Zitat antworten Zitat
Benutzerbild von Christian S.
Christian S.

Registriert seit: 19. Apr 2003
Ort: Düsseldorf
835 Beiträge
 
#2

Re: Dynamisches Array funktioniert nicht - Zugriffsverletzun

  Alt 29. Nov 2003, 18:36
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
Christian S.
Admin in der Entwickler-Ecke
  Mit Zitat antworten Zitat
Niels

Registriert seit: 25. Okt 2003
192 Beiträge
 
#3

Re: Dynamisches Array funktioniert nicht - Zugriffsverletzun

  Alt 29. Nov 2003, 18:50
Bei SetLength musst du schon die wirkliche Länge angeben:

SetLength(Field, X, Y); Das würde das selbe wie array[0..x-1,0..y-1] bedeuten.

Außerdem gibts bei dir ne Zugriffsverletzung wenn x <> y, wegen der Zuweißung
Feld[j,i] := 1; Du musst entweder
Feld[i,j] := 1; schreiben

oder du musst die Schleifen abändern in

Delphi-Quellcode:
for i := 0 to Y - 1 do
  begin
    for j := 0 to X - 1 do
    begin
      Field[j, i].Var := 1;
    end;
  end;
Du hast natürlich auch noch die Möglichkeit:
SetLength(Field, Y, X);
MfG Niels
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

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

Re: Dynamisches Array funktioniert nicht - Zugriffsverletzun

  Alt 29. Nov 2003, 19:10
Danke für eure Mühe, aber es hatte nichts geholfen.

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.
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Dynamisches Array funktioniert nicht - Zugriffsverletzun

  Alt 29. Nov 2003, 19:18
Hi,
hast du die erste Antwort von Peter nicht gelesen?

Wenn, dann musst du schreiben
for i:=0 to Y-2 do 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.

Chris
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

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

Re: Dynamisches Array funktioniert nicht - Zugriffsverletzun

  Alt 29. Nov 2003, 19:24
@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.
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

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

Re: Dynamisches Array funktioniert nicht - Zugriffsverletzun

  Alt 29. Nov 2003, 19:28
Ich habs...*GD&R*...
Es lag am SetLength, richtig ist jetzt:
Delphi-Quellcode:
  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;
Danke @all!
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Dynamisches Array funktioniert nicht - Zugriffsverletzun

  Alt 29. Nov 2003, 19:29
Hi,
das hat doch "Niels" gemeint.

Chris
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

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

Re: Dynamisches Array funktioniert nicht - Zugriffsverletzun

  Alt 29. Nov 2003, 19:32
Ja, mein Hirn läuft noch mechanisch, da dauert das ein wenig, bis die Logik sich ausbreiten kann...
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:49 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