![]() |
Delphi-Version: 5
Dynamisches Array.
Guten Morgen,
Ich habe ein kleines Problem mit einem Dynamischen Array. Ich habe eine Prozedur welche Werte Prüfen soll und diese dann in das "fehlerbehaftete" Array reinschreiben soll das ganze ist 2 Dimensional damit ich einem Wert mehrere Werte zuordnen kann.Jetzt bekomme ich aber nachdem b=5 wurde folgende Fehlermeldung: "Im Projekt.exe ist eine Exception der Klasse EAccessViolation aufgetreten:"Zugriffsverletzung bei Adresse 00401C2D in Modul 'Projekt.exe'.Schreiben von Adresse 00000001." Habe mit dem Debugger die Länge des Array Schritt für Schritt nachgeprüft es wir genau immer um 1 verlängert und dann erst der Wert hineingeschrieben.
Code:
var
KandidatenListen : array of array of Byte; . procedure Tform1.KandidatenListe(); var x,y,a,b,za :integer; begin a := 0; for x:= 1 to 9 do begin for y:= 1 to 9 do begin if (Sudoku[x,y]=0) then begin b:=0; a := a+1; b := 1; for za:=1 to 9 do begin zahl := za; If (Einheit_Pruefen(x,y)) and (Wagerecht_Pruefen(x)) and (Senkrecht_Pruefen(y)) then begin SetLength(KandidatenListen,(a)); SetLength(KandidatenListen[(a-1)],b); KandidatenListen[(a-1),b]:= za; //Hier wirft es mich mit der Fehlermeldung raus.Wenn B=5 ist. Korx[a]:= x; Kory[a]:= y; Memo1.Lines.Add('['+(IntToStr(a-1))+','+IntToStr(b)+']'+'='+IntToStr(KandidatenListen[(a-1),b])); b:= b+1; end; end; end; end; end; end; |
AW: Dynamisches Array.
Mit
Delphi-Quellcode:
schaffst Du Platz für KandidatenListen[(a-1),0] .. KandidatenListen[(a-1),b-1]. Deshalb gibt es ein Bumm bei
SetLength(KandidatenListen[(a-1)],b);
Delphi-Quellcode:
wegen b > b-1.
KandidatenListen[(a-1),b] := za;
|
AW: Dynamisches Array.
Dynamische Arrays beginnen bei 0 nicht 1.
Besser statt festen Grenzen
Delphi-Quellcode:
und
Low()
Delphi-Quellcode:
verwenden
High()
Ich würde, da ja von Anfang an bekannt ist, wie groß das Gitter ist, einmal auf Endgröße dimensionieren |
AW: Dynamisches Array.
Zitat:
Ich glaub du hast die Klammern falsch gelesen!
Delphi-Quellcode:
Schafft mir in Zeile(a) die Anzahl von (b) Spalten da ist Nie irgendwas (B-1) Anmerkung: (b:=1)(b=b+1)ergo immer => 1).
SetLength(KandidatenListen[(a-1)],b);
|
AW: Dynamisches Array.
Ich denke nicht, daß ich die Klammern falsch gelesen hab. Außerdem ist bei setlength(..., b) der Zugriff mit Index b immer illegal. Wenn Du Rangecheck einschaltest hast, wirst Du sofort die Meldung erhalten. Ohne Rangecheck knallt es je nach Speicherallokierung halt später.
|
AW: Dynamisches Array.
Zitat:
/Edit Hab den Fehler gefunden Fehler lag bei
Code:
musste zu:
KandidatenListen[(a-1),b] := za;
Code:
werden.
KandidatenListen[(a-1),(b-1)] := za;
Glaub du meintest das richtige habs Falsch verstanden. Danke. Kann Geschlossen werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 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