Lazarus 变量增量错误 "External: SIGSEGV"?

Lazarus error "External: SIGSEGV" on variable increment?

我在我的 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;之后。如果您能帮助我,我将不胜感激!

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

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

对于第二个问题,是因为你访问的是索引i,一开始它是1,所以你有问题,数组的范围由"length - 1"决定,所以如果你的长度是 1,那么你的范围是 0。所以要解决你的 for 循环中的问题,你必须像这样输入 Result[i-1] := s; 你访问你真正想要的索引。

更多关于 http://wiki.freepascal.org/Dynamic_array