3

ideoneで境界チェックを行うコードを次に示します。

範囲外エラーなしで正常に実行されます。

このコードでは 34行目でに変更しましreadArrayたがunsafeRead、それでもコンパイルされますが、スタックオーバーフローでクラッシュします。

これはGHCのバグですか、それとも何か間違ったことをしましたか?

4

1 に答える 1

7

unsafeRead0ベースのインデックスを使用するため、読み取り用にインデックスを調整する必要があります。

elem <- unsafeRead arr (i-1)

または、最小のインデックスが0の配列を割り当てる方がよいでしょう。

arr <- newArray (0,upperbound) maxBound

現状ではunsafeRead、配列内の間違った場所からの読み取り。

無関係:ideoneは32ビットGHCを使用していると思われるので、upperbound > 100000そこでコードを実行しない方がよいでしょう。

于 2012-06-04T15:54:46.487 に答える