如何修复运行时错误201?

时间:2013-12-20 22:31:24

标签: runtime-error pascal fpc

我使用-Criot -gl标志编译了程序,而不是1我得到了很多结果(事实上,我正在寻找修复216错误)。第一个是下面的代码,它是一个简单的散列函数。我不知道如何解决这个问题。

function HashStr(s : string) : integer;
var h : integer;
var c : char;
begin
   h := 0;
   for c in s do
      h := ord(c) + 31 * h; { This is the line of error }
   HashStr := h;
end;

这怎么可能超出范围?

1 个答案:

答案 0 :(得分:2)

很简单,说你有一个字符串“zzzzzzzzzzz”。 Ord(c)将为122,因此序列为

 H = 122 + (31* 0 ) = 122
 H = 122 +(31*122) = 3902
 H = 122 +(31*3902) = 121146

超过了16位整数的32767限制,如果它是32但是int,则不会需要更多的迭代来超过该限制。