From: Tadashi Saito Date: 2007-03-01T09:55:43+09:00 Subject: [ruby-dev:30456] Re: a[] += 1 で SEGV どうも、斎藤と申します。 On Thu, 1 Mar 2007 09:36:20 +0900 "Hiroki Motoyoshi" wrote: > 本吉と申します。 > > 以下のスクリプトが、 > ruby-1.8.4では正常に動くのですが、 > ruby-1.8.5ではSEGVします。 (snip) > 皆様の環境でも再現しますでしょうか。 自分の環境でも、1.8.6-preview2およびruby_1_8_6最新、とやっぱりtrunkでも 再現しました。 $ ./ruby-1.8.6/bin/ruby-1.8.6 -v segv186.rb ruby 1.8.6 (2007-02-28 patchlevel 0) [i686-linux] セグメンテーション違反です (core dumped) $ gdb ./ruby-1.8.6/bin/ruby-1.8.6 GNU gdb 6.3-debian Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-linux"...Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1". (gdb) run segv186.rb Starting program: /home/tadashi/ruby-1.8.6/bin/ruby-1.8.6 segv186.rb Program received signal SIGSEGV, Segmentation fault. 0x4003ec09 in rb_eval (self=1076521380, n=0x3) at ../../1.8.6/eval.c:2907 2907 switch (nd_type(node)) { (gdb) l 2902 2903 again: 2904 if (!node) RETURN(Qnil); 2905 2906 ruby_current_node = node; 2907 switch (nd_type(node)) { 2908 case NODE_BLOCK: 2909 if (contnode) { 2910 result = rb_eval(self, node); 2911 break; (gdb) bt #0 0x4003ec09 in rb_eval (self=1076521380, n=0x3) at ../../1.8.6/eval.c:2907 #1 0x400401af in rb_eval (self=1076521380, n=0x3) at ../../1.8.6/eval.c:3563 #2 0x4003c50c in ruby_exec_internal () at ../../1.8.6/eval.c:1599 #3 0x4003c564 in ruby_exec () at ../../1.8.6/eval.c:1619 #4 0x4003c5a1 in ruby_run () at ../../1.8.6/eval.c:1629 #5 0x0804874e in main (argc=3, argv=0x3, envp=0xbffff880) at ../../1.8.6/main.c:48 (gdb) 時間がないので、とりあえず報告のみで。 # にしても、いままでエラーにならなかったのは知らなかったっす -- 斎藤ただし