From: "染谷 康一" Date: 2010-12-09T22:56:29+09:00 Subject: [ruby-list:47678] プログラム実行時に「[BUG] Segmentation fault」 染谷と申します。 FelicaLibを使用するプログラムの実行で 以下のメッセージが出力されました。 == ここから ============================================= C:\TEMP>felica_dump.rb C:\TEMP/felicalib.rb:54: [BUG] Segmentation fault ruby 1.8.7 (2010-08-16 patchlevel 302) [i386-mswin32] This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information. == ここまで ============================================= 実行環境は、以下の通りです。  OS:WindowsXP  Ruby:Ruby-1.8.7(p302) felicalib.rbの内容ですが、以下の通りです。 == ここから ============================================= require 'Win32API' module FelicaLib dllname = 'felicalib.dll' $pasori_open = Win32API.new(dllname, 'pasori_open', 'P', 'P') $pasori_close = Win32API.new(dllname, 'pasori_close', 'P', 'V') $pasori_init = Win32API.new(dllname, 'pasori_init', 'P', 'I') $felica_polling = Win32API.new(dllname, 'felica_polling', %w(P I I I), 'P' ) $felica_free = Win32API.new(dllname, 'felica_free', 'P', 'V') $felica_getidm = Win32API.new(dllname, 'felica_getidm', %w(P P), 'V') $felica_getpmm = Win32API.new(dllname, 'felica_getpmm', %w(P P), 'V') $felica_read_without_encryption02 = Win32API.new(dllname, 'felica_read_wit hout_encryption02', %w(P I I I P), 'I') $felica_enum_systemcode = Win32API.new(dllname, 'felica_enum_systemcode', 'P', 'P') $felica_enum_service = Win32API.new(dllname, 'felica_enum_service', %w(P I ), 'P') POLLING_ANY = 0xffff POLLING_EDY = 0xfe00 POLLING_SUICA = 0x0003 SERVICE_EDY = 0x170f SERVICE_SUICA_INOUT = 0x108f SERVICE_SUICA_HISTORY = 0x090f #SERVICE_SUICA = 0x090f def pasori_open(str = nil) $pasori_open.call(str) end def pasori_close(pasori) $pasori_close.call(pasori) end def pasori_init(pasori) $pasori_init.call(pasori) end def felica_polling(pasori, systemcode, rfu, timeslot) $felica_polling.call(pasori, systemcode, rfu, timeslot) end def felica_free(felica) $felica_free.call(felica) end def felica_getidm(felica, buf) $felica_getidm.call(felica, buf) end def felica_getpmm(felica, buf) $felica_getpmm.call(felica, buf) end def felica_read_without_encryption02(felica, servicecode, mode, addr, buf) $felica_read_without_encryption02.call(felica, servicecode, mode, addr , buf) end def felica_enum_systemcode(pasori) $felica_enum_systemcode.call(pasori) end def felica_enum_service(pasori, systemcode) $felica_enum_service.call(pasori, systemcode) end module_function :pasori_open, :pasori_close, :pasori_init, :felica_polling, :f elica_free module_function :felica_getidm, :felica_getpmm, :felica_read_without_encry ption02 module_function :felica_enum_systemcode, :felica_enum_service end module FelicaLib class << self def felica_raw_values(systemcode, servicecode, little_endian = false) values = [] b = Array.new(4) psr = pasori_open "" pasori_init(psr) flc = felica_polling(psr, systemcode, 0, 0) i = 0 while felica_read_without_encryption02(flc, servicecode, 0, i, b) == 0 row = b.to_a('I') data = "" row.size.times do |j| if little_endian 4.times { |k| data += sprintf("%02x", (row[j].to_i >> (8 * k)) & 0xff) } else data += sprintf("%08x", row[j].to_i & 0xffffffff) end end yield data if block_given? values << data i += 1 end pasori_close(psr) values end end end    ※コメント行削除してあります。 == ここまで ============================================= このfelicalib.rbの54行目は、 def pasori_init(pasori) $pasori_init.call(pasori)  <=この行です。 end です。 私のコーディングに誤りがあるのでしょうか? 初めて出たメッセージですので、対処方法が わかりません。 恐れ入りますが、何方かご教授ください。 宜しくお願いします。