[#352] ruby 1.1a5 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

38 messages 1997/09/01
[#353] Re: ruby 1.1a5 released — keiju@... (石塚圭樹 ) 1997/09/01

[#354] Re: ruby 1.1a5 released — matz@... (Yukihiro Matsumoto) 1997/09/01

まつもと ゆきひろです

[#356] Re: methods [Re: ruby 1.1a5 released] — matz@... (Yukihiro Matsumoto) 1997/09/01

まつもと ゆきひろです

[#357] Re: methods [Re: ruby 1.1a5 released] — keiju@... (Keiju ISHITSUKA) 1997/09/01

けいじゅ@日本ラショナルソフトウェアです.

[#359] Re: methods [Re: ruby 1.1a5 released] — matz@... (Yukihiro Matsumoto) 1997/09/02

まつもと ゆきひろです

[#363] Re: methods [Re: ruby 1.1a5 released] — matz@... (Yukihiro Matsumoto) 1997/09/02

まつもと ゆきひろです

[#374] Re: methods [Re: ruby 1.1a5 released] — matz@... (Yukihiro Matsumoto) 1997/09/02

まつもと ゆきひろです

[#376] Re: methods [Re: ruby 1.1a5 released] — keiju@... (Keiju ISHITSUKA) 1997/09/02

けいじゅ@日本ラショナルソフトウェアです.

[#382] Re: methods [Re: ruby 1.1a5 released] — matz@... (Yukihiro Matsumoto) 1997/09/02

まつもと ゆきひろです

[#390] Re: methods [Re: ruby 1.1a5 released] — keiju@... (Keiju ISHITSUKA) 1997/09/03

けいじゅ@日本ラショナルソフトウェアです.

[#391] Re: methods [Re: ruby 1.1a5 released] — matz@... (Yukihiro Matsumoto) 1997/09/03

まつもと ゆきひろです

[#441] How to report a bug — takagi@... (TAKAGI Hiromitsu)

Bus error が出ました。

15 messages 1997/09/09

[#461] [Q] ruby-socket(mswin32) — Masaki Suketa <suke@...>

助田です

27 messages 1997/09/11
[#462] Re: [Q] ruby-socket(mswin32) — matz@... (Yukihiro Matsumoto) 1997/09/11

まつもと ゆきひろです

[#463] Re: [Q] ruby-socket(mswin32) — Masaki Suketa <suke@...> 1997/09/11

助田です

[#464] Re: [Q] ruby-socket(mswin32) — matz@... (Yukihiro Matsumoto) 1997/09/11

まつもと ゆきひろです

[#467] Re: [Q] ruby-socket(mswin32) — WATANABE Hirofumi <watanabe@...> 1997/09/11

わたなべです.

[#594] BUG?(marshal) — Masaki Suketa <suke@...>

以下のプログラムを実行した時に(3)と(4)で出力結果が違います。

17 messages 1997/09/30

[ruby-dev:497] problem about rb_scan_args()

From: shugo@... (MAEDA Shugo)
Date: 1997-09-18 07:10:27 UTC
List: ruby-dev #497
前田です。

Java-Ruby Interfaceを書いている時にちょっと変な状況に
当たったのでご報告します。

[A]

static VALUE jobject_method_missing(int argc, VALUE *argv,
				    VALUE self)
{
    char *method_name;
    VALUE method_id;

    rb_scan_args(argc, argv, "10*", &method_id);
    method_name = rb_id2name(NUM2INT(method_id));
    argc--;
    argv++;

    return call_non_static_method(self, method_name, argc, argv);
}

[B]

static VALUE jobject_method_missing(int argc, VALUE *argv,
				    VALUE self)
{
    char *method_name;

    if (argc == 0) {
	ArgError("wrong # of arguments");
    }
    method_name = rb_id2name(NUM2INT(argv[0]));
    argc--;
    argv++;

    return call_non_static_method(self, method_name, argc, argv);
}

[A]のようにrb_scan_argsを使うとSegmentation Faultしてしまうが、
[B]のようにすれば問題が起きないというものです。

このメソッドは

    rb_define_method(cJObject, "method_missing", jobject_method_missing, -1);

のように定義しています。

どのような原因が考えられるでしょうか?

一応バックトレースを付けておきます。

-- 
前田 修吾

Program received signal SIGSEGV, Segmentation fault.
0x8055438 in rb_scan_args (argc=1, argv=0xbffff7a4, 
    fmt=0x808a916 "10*", __builtin_va_alist=-1073744176)
    at class.c:502
502             *var = ary_new4(argc, argv);
(gdb) bt
#0  0x8055438 in rb_scan_args (argc=1, argv=0xbffff7a4, 
    fmt=0x808a916 "10*", __builtin_va_alist=-1073744176)
    at class.c:502
#1  0x804fd12 in jobject_method_missing (argc=1, argv=0xbffff7a4, 
    self=1075231364) at java.c:545
#2  0x805c016 in rb_call (class=0x4016cdbc, recv=1075231364, 
    mid=3409, argc=1, argv=0xbffff7a4, scope=1) at eval.c:2894
#3  0x805c9c5 in rb_funcall2 (recv=1075231364, mid=3409, argc=1, 
    argv=0xbffff7a4) at eval.c:3192
#4  0x805bcba in rb_undefined (obj=1075231364, id=7833, argc=0, 
    argv=0x0, call_status=0) at eval.c:2772
#5  0x805bdb0 in rb_call (class=0x4016c088, recv=1075231364, 
    mid=7833, argc=0, argv=0x0, scope=0) at eval.c:2827
#6  0x80595e0 in rb_eval (self=1075278664, node=0x4016c754)
    at eval.c:1606
#7  0x80587ac in rb_eval (self=1075278664, node=0x4016c72c)
    at eval.c:1264
#8  0x8057720 in eval_node (self=1075278664) at eval.c:687
#9  0x80577bd in ruby_run () at eval.c:719
#10 0x804e9dc in main (argc=2, argv=0xbffffbcc, envp=0xbffffbd8)
    at main.c:33
#11 0x804e96e in ___crt_dummy__ ()
(gdb)

In This Thread

Prev Next