Thema: Delphi Zugriffsverletzung Array

Einzelnen Beitrag anzeigen

Murcielago82

Registriert seit: 7. Apr 2006
30 Beiträge
 
#1

Zugriffsverletzung Array

  Alt 3. Jul 2006, 19:25
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 <> '0then
        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 = '0then
          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;
  Mit Zitat antworten Zitat