这是一些在ideone进行边界检查的代码。
它成功运行,没有越界错误。
在this代码中,在第34行,我已将readArray
更改为unsafeRead
,但它仍会编译,但会因堆栈溢出而崩溃。
这是GHC错误还是我做错了什么?
答案 0 :(得分:7)
unsafeRead
使用从0开始的索引,因此您必须调整索引以进行读取,
elem <- unsafeRead arr (i-1)
或者更好的是,分配索引最小为0的数组
arr <- newArray (0,upperbound) maxBound
原样,unsafeRead
从数组中的错误位置读取。
无关:我怀疑ideone使用的是32位GHC,因此最好不要在upperbound > 100000
处运行代码。