3
下面是一些在ideone处执行边界检查的代码。unsafeRead导致堆栈溢出
它成功运行,没有超出界限的错误。
在this代码,在线34我已经在readArray
更改为unsafeRead
,它仍然编译,但崩溃堆栈溢出。
这是一个GHC错误还是我做错了什么?
下面是一些在ideone处执行边界检查的代码。unsafeRead导致堆栈溢出
它成功运行,没有超出界限的错误。
在this代码,在线34我已经在readArray
更改为unsafeRead
,它仍然编译,但崩溃堆栈溢出。
这是一个GHC错误还是我做错了什么?
unsafeRead
使用0为基础的指数,所以你必须要么调整用于读取的索引,
elem <- unsafeRead arr (i-1)
,或者更好地,具有0
arr <- newArray (0,upperbound) maxBound
作为至少索引分配阵列是,unsafeRead
从数组中的错误位置读取。
无关:我怀疑ideone使用32位GHC,所以最好不要在那里运行代码upperbound > 100000
。
还要注意''unsafeRead'需要一个Int,而'readArray'需要一个'Ix',这应该是一个小技巧...... – sclv