3
下面是一些在ideone處執行邊界檢查的代碼。unsafeRead導致堆棧溢出
它成功運行,沒有超出界限的錯誤。
在this代碼,在線34我已經在readArray
更改爲unsafeRead
,它仍然編譯,但崩潰堆棧溢出。
這是一個GHC錯誤還是我做錯了什麼?
下面是一些在ideone處執行邊界檢查的代碼。unsafeRead導致堆棧溢出
它成功運行,沒有超出界限的錯誤。
在this代碼,在線34我已經在readArray
更改爲unsafeRead
,它仍然編譯,但崩潰堆棧溢出。
這是一個GHC錯誤還是我做錯了什麼?
unsafeRead
使用0爲基礎的指數,所以你必須要麼調整用於讀取的索引,
elem <- unsafeRead arr (i-1)
,或者更好地,具有0
arr <- newArray (0,upperbound) maxBound
作爲至少索引分配陣列是,unsafeRead
從數組中的錯誤位置讀取。
無關:我懷疑ideone使用32位GHC,所以最好不要在那裏運行代碼upperbound > 100000
。
還要注意''unsafeRead'需要一個Int,而'readArray'需要一個'Ix',這應該是一個小技巧...... – sclv