代码如下:
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.
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.
Result:=FSentenceStart[Index];//越界
Result:=FSentenceStart[Index];//越界我觉得即使越界,程序也不该报错才对啊!只是程序并没有给FSentenceStart[Index]分配内存,应该会返回0吧!不过考虑点越界问题是好的,动态数组是从索引0开始的。
程序应该没什么问题!
创建:
SetLength(FSentenceStart,100);
赋值
procedure TSentenceStarts.SetStart(Index, Value: integer);Index:=High(FSentenceStart)+1;/101
Result:=FSentenceStart[101];//越界
Index:=High(FSentenceStart)+1;//101
Result:=FSentenceStart[Index];//越界
Index:=High(FSentenceStart)+1;//101
FSentenceStart[Index]:=Value;//越界不好意思:)
估计是数组越界!
创建:
SetLength(FSentenceStart,100);
赋值
procedure TSentenceStarts.SetStart(Index, Value: integer);Index:=High(FSentenceStart)+1;/101" //此处不为101而应该是100,High(FSentenceStart)=99
动态数组 0~99