Lazarus错误“外部:SIGSEGV”变量增量?

时间:2015-11-28 10:27:17

标签: lazarus freepascal

我的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;之后发生异常。如果你能帮助我,我真的很感激!

2 个答案:

答案 0 :(得分:3)

TStringArray = array of string;等动态数组从零开始;您的代码将其用作从1开始并引发访问冲突。

您应该将i := 1;替换为i := 0;

答案 1 :(得分:0)

对于第二个问题,这是因为你正在访问索引i,一开始它是1,这就是你遇到问题的原因,数组的范围由“length - 1”决定,所以如果你的长度是1,然后你的范围是0.所以要解决for循环中的问题,你必须像这样放Result[i-1] := s;,你可以访问你真正想要的索引。

http://wiki.freepascal.org/Dynamic_array

上有更多内容