3

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

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

这段代码中,我在第 34 行更改readArrayunsafeRead,它仍然可以编译,但由于堆栈溢出而崩溃。

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

4

1 回答 1

7

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

elem <- unsafeRead arr (i-1)

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

arr <- newArray (0,upperbound) maxBound

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

无关:我怀疑 ideone 使用 32 位 GHC,所以最好不要在upperbound > 100000那里运行代码。

于 2012-06-04T15:54:46.487 回答