2013-12-20 138 views
0

我用-Criot -gl標誌編譯程序,而不是1,我得到了很多結果給我的詭計(實際上,我正在尋找修復216錯誤)。第一個是下面的代碼,它是一個簡單的哈希函數。我不知道如何解決這個問題。如何解決運行時錯誤201?

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; 

這怎麼可能超出範圍?

+0

Downvoter - 你能解釋一下嗎? –

回答

2

輕鬆地說,你有一個字符串「zzzzzzzzzzz」。奧德(三)西港島線是122,所以這個順序是

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

超過了32767限制16個整數,如果它是一個32,但INT,它不會採取更多的迭代超過該限制。

+0

謝謝。我修正了這個問題。但是現在我得到了一個錯誤215.我已經使用'Cardinal'類型並且字符串不超過12個字符。我怎樣才能解決這個問題? –

+1

使用qword,你很適合64位。但這只是推遲了不可避免的事情。更多地解釋你試圖完成的事情。 –

相關問題