我的Lazarus项目出了问题:每次我想使用一个函数时都会抛出上面的错误(External: SIGSEGV
)。我不知道这意味着什么,但有些调试告诉我,这是代码,导致错误:
class function TUtils.AsStringArray(const Strs:TStrings): TStringArray;
var
s:string;
i:integer;
begin
SetLength(Result, Strs.Count);
i := 1;
for s in Strs do
begin
Result[i] := s;
i := i + 1;
end;
end;
和定义
TStringArray = array of string;
TUtils = class
public
[...]
class function AsStringArray(const Strs:TStrings): TStringArray; static;
end;
i := i + 1;
之后发生异常。如果你能帮助我,我真的很感激!
答案 0 :(得分:3)
TStringArray = array of string;
等动态数组从零开始;您的代码将其用作从1开始并引发访问冲突。
您应该将i := 1;
替换为i := 0;
答案 1 :(得分:0)
对于第二个问题,这是因为你正在访问索引i,一开始它是1,这就是你遇到问题的原因,数组的范围由“length - 1”决定,所以如果你的长度是1,然后你的范围是0.所以要解决for循环中的问题,你必须像这样放Result[i-1] := s;
,你可以访问你真正想要的索引。