type TEntry = record TimeCode: Integer; LineIndex: Integer; end;
var FDataList: TStrings; FData: array of TEntry;
FDataList, FData 都已经处理有数据了。
function TDataParser.GetDataString(AIdx: Integer): string; var Tmp: string; begin Tmp := ''; if Assigned(FDataList) then begin // 在 Delphi 10.1 Berlin 中,报错EStringListError -- // List index out of bounds(0) //(并且仅仅在 Release下报错,而在 DEBUG 下不报错)。
if (AIdx >= 0) and (Length(FData) > 0) then if FData[AIdx].LineIndex >= 0 then Tmp := FDataList[FData[AIdx].LineIndex]; end; Result := Tmp; end;
----------------------------------------------
-
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
type TEntry = record TimeCode: Integer; LineIndex: Integer; end;
var FDataList: TStrings; FData: array of TEntry;
function GetDataString(AIdx: Integer): string; var Tmp: string; begin Tmp := ''; if Assigned(FDataList) then begin // 在 Delphi 10.1 Berlin 中,报错EStringListError -- // List index out of bounds(0) //(并且仅仅在 Release下报错,而在 DEBUG 下不报错)。
function GetDataString(AIdx: Integer): string; var Tmp: string; begin Tmp := ''; if Assigned(FDataList) then begin // 在 Delphi 10.1 Berlin 中,报错EStringListError -- // List index out of bounds(0) //(并且仅仅在 Release下报错,而在 DEBUG 下不报错)。
if (AIdx >= 0) and (Length(FData) > 0) then if FData[AIdx].LineIndex >= 0 then Tmp := FDataList[FData[AIdx].LineIndex]; end; Result := Tmp; end; 楼主有二处检查条件不够: if (AIdx >= 0) and (AIdx < Length(FData)) then if (FData[AIdx].LineIndex >= 0) and (FData[AIdx].LineIndex<Length(FDataList)then Tmp := FDataList[FData[AIdx].LineIndex]; 建议楼主加强代码的可读性
----------------------------------------------
-