变量可能尚未初始化

时间:2019-02-14 18:12:00

标签: arrays delphi pascal

我正在编写迷宫生成算法,以通过递归回溯随机生成迷宫。

程序编译并且使用过程“控制器”选择随机方向时,出现“访问冲突”

我也收到消息说: “变量“ i”可能尚未初始化” “变量'j'可能尚未初始化”

以上错误是否与访问冲突有关,如果是,是什么原因引起的?

procedure TfrmMazeGame.btnSTartGameClick(Sender: TObject);
var
  i, j: integer;
begin
  lblTitle.Visible := false;
  btnStartGame.Visible := false;
  btnExit.Visible := false;
  StrGridMaze.Visible := true;

  for i := 0 to 19 do
  begin
    for j := 0 to 19 do
    begin
      maze[i, j] := TCell.Create;
    end;
  end;
  fillarray (maze);
  GenerateMaze(maze);
end;

procedure TfrmMazeGame.Controller(maze: TMaze; CurrentCell: TCell);
type
  TDirection = (up, down, left, right);
var
  Direction: TDirection;
  i, j: integer;
begin
  Direction := TDirection(random(3));
  case Direction of
    up:
      begin
        CurrentCell := maze[i, j - 1];
        CurrentCell.Wall := false;
      end;
    down:
      begin
        CurrentCell := maze[i, j + 1];
        CurrentCell.Wall := false;
      end;
    left:
      begin
        CurrentCell := maze[i - 1, j];
        CurrentCell.Wall := false;
      end;
    right:
      begin
        CurrentCell := maze[i + 1, j];
        CurrentCell.Wall := false;
      end;
  end;
end;

procedure TfrmMazeGame.fillArray(maze: TMaze);
var
  i, j: integer;
begin
  for i := 0 to 19 do
  begin
    for j := 0 to 19 do
    begin
      maze[i,j].Wall := true;
    end;
  end;
end;

procedure TfrmMazeGame.FormCreate(Sender: TObject);
begin
  position := poScreenCenter;
  StrGridMaze.Visible := false;
end;

procedure TfrmMazeGame.GenerateMaze(maze: TMaze);
var
  CurrentCell: TCell;
begin
  CurrentCell := maze[0, 0];
  maze[0, 0].Wall := false;
  Controller(maze, CurrentCell);
end;

1 个答案:

答案 0 :(得分:4)

Controller函数中,您不会初始化局部变量ij。编译器告诉您。是的。

因此,变量值是不确定的,并且可以肯定地解释访问冲突,因为您超出范围访问数组。