代码如下:
D7下编译通过,但在外部执行SentenceStarts的方法时出错
谁能帮我解决这个问题呀!unit RcEdit;interfaceuses
  Classes, ComCtrls;type
{TSentenceStarts}
  TSentenceStarts=class(TObject)
  private
    FSentenceStart:array of integer;
    FCount:integer;
    function GetStart(Index: integer):integer;
    procedure SetStart(Index, Value: integer);
  public
    constructor Create;
    destructor Destroy; override;
    procedure Add(Value:integer);
    property Count: integer read FCount;
    property SentenceStart[Index: integer]: integer read GetStart write SetStart; default;
  end;implementation{
****************************** TSentenceStarts *********************************
}
constructor TSentenceStarts.Create;
begin
  inherited Create;
  SetLength(FSentenceStart,100);
  FCount:=0;
end;destructor TSentenceStarts.Destroy;
begin
  inherited Destroy;
end;function TSentenceStarts.GetStart(Index: integer):integer;
begin
  if (Index>FCount-1) then
    Index:=High(FSentenceStart)+1;
  Result:=FSentenceStart[Index];
end;procedure TSentenceStarts.SetStart(Index, Value: integer);
begin
  if (Index>FCount-1) then
    Index:=High(FSentenceStart)+1;
  FSentenceStart[Index]:=Value;
end;procedure TSentenceStarts.Add(Value:integer);
begin
  FSentenceStart[FCount]:=Value;
  inc(FCount);
  if High(FSentenceStart)<FCount then
    SetLength(FSentenceStart,High(FSentenceStart)+6);
end;end.

解决方案 »

  1.   

    Index:=High(FSentenceStart)+1;
      Result:=FSentenceStart[Index];//越界
      

  2.   

    Index:=High(FSentenceStart)+1;
      Result:=FSentenceStart[Index];//越界我觉得即使越界,程序也不该报错才对啊!只是程序并没有给FSentenceStart[Index]分配内存,应该会返回0吧!不过考虑点越界问题是好的,动态数组是从索引0开始的。
    程序应该没什么问题!
      

  3.   

    不会越界High(FSentenceStart),经测试过的,因为下标是从零开始的
      

  4.   


    创建:
      SetLength(FSentenceStart,100);
    赋值
    procedure TSentenceStarts.SetStart(Index, Value: integer);Index:=High(FSentenceStart)+1;/101
      Result:=FSentenceStart[101];//越界
      

  5.   

    赋值:  
      Index:=High(FSentenceStart)+1;//101
      Result:=FSentenceStart[Index];//越界
      

  6.   

    还是粘错了 
       Index:=High(FSentenceStart)+1;//101
      FSentenceStart[Index]:=Value;//越界不好意思:)
      

  7.   

    类初始化时候已经SetLength(FSentenceStart,100);分配内存空间
    估计是数组越界!
      

  8.   

    "唉
    创建:
      SetLength(FSentenceStart,100);
    赋值
    procedure TSentenceStarts.SetStart(Index, Value: integer);Index:=High(FSentenceStart)+1;/101"  //此处不为101而应该是100,High(FSentenceStart)=99
    动态数组 0~99