From: matz@... (Yukihiro Matsumoto) Date: 2000-02-04T09:40:02+09:00 Subject: [ruby-list:20483] Re: Wrapping Regexp in C++/Windows まつもと ゆきひろです In message "[ruby-list:20475] Wrapping Regexp in C++/Windows" on 00/02/04, OZAWA Sakuro writes: |ruby-listよりはruby-extのような気もするのですが、ひとまずlistのほうへ出 |します。 |extって拡張ライブラリを作るためのMLだけど、rubyを埋め込むほうも可でしょ |うか? やったことないですけど、不可能ではないと思います。 |Windows98環境でC++の正規表現クラスRegexpが欲しくなったので、rubymw.dllを |使って作ってるのですが、以下にあるメンバ関数matchを数千回呼び出すうちに、 |アクセス違反が生じます。 うーん、regex.cだけ使ったらどうかという気もしますが :-) |ソースを追ってみたのですが、 | |gc.cのrb_gc_mark()にてobjが不正 |reex.cのinit_regs()にてregsが不正 | |など止まるところがまちまちなので困っています。 おそらくですが、コンストラクタの中で | rb_global_variable(®exp_); が原因ではないかと。rb_global_variable()で指定されたアドレス はRegexpオブジェクトがdeleteされた後は不正なアドレスになるん ではないかと。 とはいえ、ちょっと考えた限りでは他にGCから保護する方法が無い んで、rb_global_variable()で登録したアドレスを削除するAPIが 必要な気がしますね。 まつもと ゆきひろ /:|)