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;
你访问你真正想要的索引。
我在我的 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;
你访问你真正想要的索引。