![]() |
Zugriffsverletzung Array
Hallo, ich speicher die Werte eines Stringgrid in ein array Copy_Sudoku.Will die Werte dann zurück ind Grid geben sräter und bekomme immer eine Zugriffsverletzung!
Delphi-Quellcode:
procedure TSudoku.generierenClick(Sender: TObject);
VAR anzahl,i,j,x,schwierigkeitsgrad,position_neu:integer; copy_sudoku: array[0..80] of integer; procedure copy_neu(); VAR y,z:integer; begin x:=0; for y:= 0 to n-1 do // Alles reinigen! for z:= 0 to n-1 do begin copy_sudoku[x]:=strtoint(EigenschaftenGrid[y,z].wert); inc(x); end; end; procedure copy_alt(); VAR y,z:integer; begin x:=0; for y:= 0 to n-1 do // Alles reinigen! for z:= 0 to n-1 do begin EigenschaftenGrid[i,y].wert:= inttostr(copy_sudoku[x]); inc(x); end; end; begin for x:=0 to 81 do // Verlauf reinigen! verlauf[x]:=0; for i:= 0 to n-1 do // Alles reinigen! for j:= 0 to n-1 do begin EigenschaftenGrid[i,j].wert:='0'; StringGrid1.Cells[j,i]:=''; end; case Schwierigkeitsauswahl.itemindex of // Schwierigkeit setzen 0: begin schwierigkeitsgrad:= 30; end; 1: begin schwierigkeitsgrad:= 50; end; 2: begin schwierigkeitsgrad:= 70; end; end; erstellen_neu(StringGrid1); // erstellt ein zufällig voll gefülltes Sudoku copy_neu(); repeat for i:= 0 to n-1 do // Alles reinigen! for j:= 0 to n-1 do begin EigenschaftenGrid[i,j].wert:='0'; StringGrid1.Cells[j,i]:=''; end; copy_alt(); ////Hier ist die Zugriffsverletzung!!! showmessage(inttostr(schwierigkeitsgrad)); for x:=1 to schwierigkeitsgrad do // zahlen raus nehmen begin position_neu:= random(81)+1; wähle_zelle(position_neu); EigenschaftenGrid[starti,startj].wert:='0'; EigenschaftenGrid[starti,startj].vorgegeben := 0; end; lösbar:= true; x:=0; for i:= 0 to n-1 do for j:= 0 to n-1 do begin if EigenschaftenGrid[i,j].wert <> '0' then begin StringGrid1.Cells[j,i]:= EigenschaftenGrid[i,j].wert; verlauf[x]:= EigenschaftenGrid[i,j].Gridzellen_Nummer; inc(x); end else StringGrid1.Cells[j,i]:=''; end; loesen_ausschluss(StringGrid1); for i:= 0 to n-1 do for j:= 0 to n-1 do if EigenschaftenGrid[i,j].wert = '0' then lösbar:=false; if lösbar = false then begin for i:= 0 to n-1 do for j:= 0 to n-1 do begin EigenschaftenGrid[i,j].wert:= '0'; StringGrid1.Cells[j,i]:=''; end; end; x:=0; for i:= 0 to n-1 do for j:= 0 to n-1 do if EigenschaftenGrid[i,j].Gridzellen_Nummer = verlauf[x] then begin StringGrid1.Cells[j,i]:= EigenschaftenGrid[i,j].wert; EigenschaftenGrid[i,j].vorgegeben := 1; inc(x); end else begin EigenschaftenGrid[i,j].wert:= '0'; StringGrid1.Cells[j,i]:=''; EigenschaftenGrid[i,j].vorgegeben := 0; end; until lösbar = true end; |
Re: Zugriffsverletzung Array
Welcher wert hat n?
Setzte mal einen Breakpoint in der Prozedur Copy_alt und schau dir das mal im dDbugger an. |
Re: Zugriffsverletzung Array
Ok Fehler selbst gefunden
Delphi-Quellcode:
Danke für die Mühe
procedure copy_alt();
VAR y,z:integer; begin x:=0; for y:= 0 to n-1 do // Alles reinigen! for z:= 0 to n-1 do begin EigenschaftenGrid[i,y].wert:= inttostr(copy_sudoku[x]); // Hier muss es EigenschaftenGrid[z,y].wert inc(x); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 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