fujiokaです。

C言語での拡張ライブラリの書き方を勉強中なのですが、
継承がどうしてもわからないので、教えて頂けませんでしょうか。

#include <ruby.h>

VALUE rb_cPerson;

typedef struct {
  char name[256];
  char family[256];
} Person;

VALUE Person_alloc(VALUE klass){
  Person *ptr;
  return Data_Make_Struct(klass, Person, 0, -1, ptr);
}
VALUE Person_view(VALUE self){
  Person *ptr;
  Data_Get_Struct(self,Person,ptr);
  printf("%s\n",ptr->name);
  return(self);
}

VALUE Person_initialize(VALUE self,VALUE name,VALUE family){
  Person *ptr;
  /* check type*/
  Check_Type(name,T_STRING);
  Check_Type(family,T_STRING);
  Data_Get_Struct(self,Person,ptr);
  strcpy(ptr->name,StringValuePtr(name));
  strcpy(ptr->family,StringValuePtr(family));
  return(Qnil);
}

void Init_Jikken(VALUE val){
  rb_cPerson = rb_define_class("Person", rb_cArray);
  rb_define_alloc_func(rb_cPerson, Person_alloc);
  rb_define_private_method(rb_cPerson, "initialize", Person_initialize, 2);
  rb_define_method(rb_cPerson, "view", Person_view, 0);
}

このPersonクラスはArrayを継承したいのですが、
require 'Jikken'
jikken=Person.new("henoheno","moheji")
jikken.push("hoge")

を実行すると

fujioka@vmmain:~/rap/Jikken$ ruby jikken.rb
jikken.rb:24: [BUG] Segmentation fault
ruby 1.8.2 (2005-04-11) [i386-linux]

アボートしました

と出てしまいます。このソースを参考にと言うことでも構いませんので、
教えて頂けませんでしょうか。