unsafeRead导致堆栈溢出

3
这是一些进行边界检查的代码,点击此处查看。它运行良好,没有越界错误。
代码中,在第34行将readArray更改为unsafeRead,虽然它仍可以编译,但会导致栈溢出。这是GHC的一个bug还是我做错了什么?
1个回答

7

unsafeRead使用基于0的索引,所以您需要调整读取的索引位置。

elem <- unsafeRead arr (i-1)

或者更好的方式是将数组分配给最小索引0。
arr <- newArray (0,upperbound) maxBound

目前,unsafeRead 从数组中读取错误的位置。

无关紧要的提示:我怀疑 ideone 使用的是 32 位 GHC,因此最好不要在那里运行具有 upperbound > 100000 的代码。


还要注意的是,unsafeRead 接受一个 Int,而 readArray 接受一个 Ix,这应该提示一些事情正在发生... - sclv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接