访问冲突0040690B delphi

Ger*_*dAA 0 delphi for-loop

我的代码有效,但一直给我访问冲突错误."模块中地址00440690B的访问冲突.读取地址01F62C42." 怎么了?我怎样才能让它发挥作用?第二个循环什么都不做.请帮忙!

Var
   num1, num2, k : Integer;
   LL : string;

begin

LL := '       ';
num1 := 4;
num2 := 4;
  for k := 1 to 7 do
    begin
      LL[num1] := '*';
      LL[num2] := '*';
      redt.Lines.Add(LL);
      num1 := num1 +1;
      num2 := num2 -1;
    end;
  for k := 1 to 3 do
redt.Lines.Add('   *   ');

end;
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 11

我的代码有效.

不,不是的.您正在访问LL那些超出范围的元素.在第一个循环的最后一次迭代中,num1有值10,并且num2有值-2.当用作索引时,这两个都是越界的LL.为有效索引LL17.所以我猜第一个循环应该运行14.

如果要在编译器选项中启用范围检查,编译器将能够告诉您这一点.我不能强调使用范围检查的重要性.使用它,让编译器找到你的缺陷.

  • +1用于范围检查.并且边界检查,就此而言.那些编译器选项可供您保护; 使用它们,除非你真的知道你在做什么,你确定*你不需要它们. (8认同)