Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
这是一些在ideone进行边界检查的代码。
它成功运行,没有越界错误。
在这段代码中,我在第 34 行更改readArray为unsafeRead,它仍然可以编译,但由于堆栈溢出而崩溃。
readArray
unsafeRead
这是 GHC 错误还是我做错了什么?
unsafeRead使用基于 0 的索引,因此您必须调整索引以进行读取,
elem <- unsafeRead arr (i-1)
或者,更好的是,分配最小索引为 0 的数组
arr <- newArray (0,upperbound) maxBound
照原样unsafeRead,从数组中的错误位置读取。
无关:我怀疑 ideone 使用 32 位 GHC,所以最好不要在upperbound > 100000那里运行代码。
upperbound > 100000