Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Zugriffsverletzung Array (https://www.delphipraxis.net/72603-zugriffsverletzung-array.html)

Murcielago82 3. Jul 2006 18:25


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;

mkinzler 3. Jul 2006 18:27

Re: Zugriffsverletzung Array
 
Welcher wert hat n?
Setzte mal einen Breakpoint in der Prozedur Copy_alt und schau dir das mal im dDbugger an.

Murcielago82 3. Jul 2006 18:33

Re: Zugriffsverletzung Array
 
Ok Fehler selbst gefunden
Delphi-Quellcode:
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;
Danke für die Mühe


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:03 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