unsafeRead导致堆栈溢出

时间:2012-06-04 15:32:22

标签: haskell stack-overflow

这是一些在ideone进行边界检查的代码。

它成功运行,没有越界错误。

this代码中,在第34行,我已将readArray更改为unsafeRead,但它仍会编译,但会因堆栈溢出而崩溃。

这是GHC错误还是我做错了什么?

1 个答案:

答案 0 :(得分:7)

unsafeRead使用从0开始的索引,因此您必须调整索引以进行读取,

elem <- unsafeRead arr (i-1)

或者更好的是,分配索引最小为0的数组

arr <- newArray (0,upperbound) maxBound

原样,unsafeRead从数组中的错误位置读取。

无关:我怀疑ideone使用的是32位GHC,因此最好不要在upperbound > 100000处运行代码。