数组的越界错误,是程序代码中的严重错误,造成内存紊乱。
Delphi的Try语句,对数组的越界是不做检查的!

解决方案 »

  1.   

    我的理解,这种错误涉及内在紊乱。让代码无处下手,自身失去检测基本功能,也就无法进行Try检查了。
    打个比方,使用万能表测量电阻,电池无电了。还如何去测量呢?
      

  2.   


    type
      TForm1 = class(TForm)
        btn1: TButton;
        procedure btn1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
        procedure AppException(Sender: TObject; E: Exception);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.AppException(Sender: TObject; E: Exception);
    begin
      ShowMessage('aaa');
    end;procedure TForm1.btn1Click(Sender: TObject);
    var
      a: array [0 .. 3] of Integer;
      I: Integer;
    begin
      for I := 0 to 11 do
        a[I] := 3;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      Application.OnException := AppException;
    end;
      

  3.   


    如果数组越界写入了数据,导致其它地址数据错误,造成内存紊乱,那么首先它是在【越界处的地址写入了】
    而实际上运行中抛出了异常,它被检测到了,根本就没写入数据,没有所谓的【内存紊乱】只不过是Delphi的编译器默认没有打开【Range checking】而已,ctrl+shift+F11在Compilong中设置一下即可,也可以使用遇编译指令{$R+}打开。打开后,下面代码就可以被try except end捕获procedure TForm1.btn1Click(Sender: TObject);
    var
      A: array [0 .. 3] of Integer;
      I: Integer;
    begin
      try
        for I := 0 to 11 do
          A[I] := 3;
      except  end;
    end;