Project

General

Profile

Actions

Bug #1330

closed

BigDecimal オブジェクトを何度も使い回すと Bus Error が発生することがある

Added by mrkn (Kenta Murata) over 13 years ago. Updated over 11 years ago.

Status:
Closed
Priority:
Normal
Target version:
ruby -v:
ruby 1.8.8dev (2009-03-28) [i386-darwin9.6.0]

Description

=begin
以下のように BigDecimal オブジェクトを何度も再利用すると BusError が起こります。

$ ~/ruby-1.8.8-r23088/bin/ruby -rbigdecimal -ve '
a = BigDecimal("10000000000000000000000000000000000000000")
b = BigDecimal("0.0000000000000000000000000000001")
1000000.times{ a + b }'
ruby 1.8.8dev (2009-03-28) [i386-darwin9.6.0]
-e:4: [BUG] Bus Error
ruby 1.8.8dev (2009-03-28) [i386-darwin9.6.0]

Abort trap

次のように、times のブロック内で何かを puts することで、これを回避できることが分かりました。

$ ~/ruby-1.8.8-r23088/bin/ruby -rbigdecimal -ve '
a = BigDecimal("10000000000000000000000000000000000000000")
b = BigDecimal("0.0000000000000000000000000000001")
1000000.times{ $stderr.puts ""; a + b }' 2>/dev/null
ruby 1.8.8dev (2009-03-28) [i386-darwin9.6.0]

ところが、puts の引数を省略すると Bus Error が復活します。

$ ~/ruby-1.8.8-r23088/bin/ruby -rbigdecimal -ve '
a = BigDecimal("10000000000000000000000000000000000000000")
b = BigDecimal("0.0000000000000000000000000000001")
1000000.times{ $stderr.puts; a + b }'
ruby 1.8.8dev (2009-03-28) [i386-darwin9.6.0]
(非常に大量の改行文字は省略)
-e:4: [BUG] Bus Error
ruby 1.8.8dev (2009-03-28) [i386-darwin9.6.0]

Abort trap
=end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0