var
i,j:integer;
tempstr:string;
Begin
For i:=0 to 100 do
   begin
      tempstr:='';
      for j:=0 to Const1 do //Const1 是在其他单元中定义的常量值为64
        tempstr:=tempstr+chrarray[j]; 
       //CHRARRAY在其他单元的定义是:ARRAY [0..49] OF CHAR;
   end;
end;
针对上面小程序发现两个问题:
1.调试时,用WATCH查看I值时,不允许查看;
2.为什么DELPHI不给出数组越界提示呢?
本人分析可能是DELPHI编译器的"优化"所致,可是关闭该选项后并没有什么变化?请问到底是怎么回事? 谢谢!            

解决方案 »

  1.   

    1、在Pascal中,循环变量不允许在循环过程中被修改,因此在Watch中也不允许查看。
    2、因为此时没有打开越界检查这个编译器指令。如果程序改为:
      {$R+}
      for i:=0 to 3 do
      begin
        tempstr:='';
        for j:=0 to 64 do
          tempstr:=tempstr+chrarray[j];
      end;
      {$R-}
    你可以看到运行时越界异常了。
    这两个问题都跟编译器的优化没有关系。—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————