[Rubycocoa-devel 760] Re: C-array pointers of variable length

アーカイブの一覧に戻る

Fujimoto Hisa hisa****@fobj*****
Fri Feb 23 16:16:11 JST 2007


Hi Laurent

Two samples, CIBevelSample and CIMicroPaint, down with the current  
(1589).
These seemed to work until a few days ago. I can't find out the cause
yet, and appended the snippet of the stack trace.

about CIMicroPaint, it down at the line 134 in sample/SampleCIView.rb

    @context.drawImage_atPoint_fromRect(@image, rr.origin, rr)

--
hisa


# snippet of
Exception:  EXC_BAD_ACCESS (0x0001)
Codes:      KERN_INVALID_ADDRESS (0x0001) at 0x72662e71

Thread 0 Crashed:
0   libSystem.B.dylib              	0x90000f88 pthread_mutex_lock + 17
1   com.apple.opengl               	0x931c059e CGLGetVirtualScreen + 172
2   com.apple.QuartzCore           	0x93ed41bb fe_cgl_context_screen  
+ 32
3   com.apple.QuartzCore           	0x93ebdac0 -[CIOpenGLContextImpl  
updateContext] + 61
4   com.apple.QuartzCore           	0x93ebd9b6 -[CIOpenGLContextImpl  
render:] + 196
5   com.apple.QuartzCore           	0x93ed6377 -[CIContext  
drawImage:inRect:fromRect:] + 1437
6   com.apple.QuartzCore           	0x93ed854a -[CIContext  
drawImage:atPoint:fromRect:] + 121
7   com.apple.rubycocoa            	0x0003229d ffi_call_SYSV + 29
8   com.apple.rubycocoa            	0x0003223e ffi_call + 98
9   com.apple.rubycocoa            	0x0002f917 rb_ffi_dispatch + 579
10  com.apple.rubycocoa            	0x000211ee objcptr_cptr + 1465
11  com.apple.rubycocoa            	0x000219c4 objcptr_cptr + 3471
12  libruby.1.dylib                	0x96092259  
rb_with_disable_interrupt + 450
13  libruby.1.dylib                	0x9609a973 Init_eval + 17638
14  libruby.1.dylib                	0x9609b1d8 Init_eval + 19787
15  libruby.1.dylib                	0x960987a1 Init_eval + 8980
16  libruby.1.dylib                	0x96099281 Init_eval + 11764
17  libruby.1.dylib                	0x9609ae6b Init_eval + 18910
18  libruby.1.dylib                	0x9609b1d8 Init_eval + 19787
19  libruby.1.dylib                	0x9609e796 rb_thread_wait_fd + 938


# from CIMicroPaint.crash.log
Exception:  EXC_BAD_ACCESS (0x0001)
Codes:      KERN_INVALID_ADDRESS (0x0001) at 0x439c0010

Thread 0 Crashed:
0   libSystem.B.dylib              	0x90000f88 pthread_mutex_lock + 17
1   com.apple.opengl               	0x931c059e CGLGetVirtualScreen + 172
2   com.apple.QuartzCore           	0x93ed41bb fe_cgl_context_screen  
+ 32
3   com.apple.QuartzCore           	0x93ebdac0 -[CIOpenGLContextImpl  
updateContext] + 61
4   com.apple.QuartzCore           	0x93ebd9b6 -[CIOpenGLContextImpl  
render:] + 196
5   com.apple.QuartzCore           	0x93ed6377 -[CIContext  
drawImage:inRect:fromRect:] + 1437
6   com.apple.QuartzCore           	0x93ed854a -[CIContext  
drawImage:atPoint:fromRect:] + 121
7   com.apple.rubycocoa            	0x0003229d ffi_call_SYSV + 29
8   com.apple.rubycocoa            	0x0003223e ffi_call + 98
9   com.apple.rubycocoa            	0x0002f917 rb_ffi_dispatch + 579
10  com.apple.rubycocoa            	0x000211ee objcptr_cptr + 1465
11  com.apple.rubycocoa            	0x000219c4 objcptr_cptr + 3471
12  libruby.1.dylib                	0x96092259  
rb_with_disable_interrupt + 450
13  libruby.1.dylib                	0x9609a973 Init_eval + 17638


On 2007/02/23, at 3:45, Laurent Sansonetti wrote:

> Hi guys,
>
> I added some better support for functions/methods dealing with C-array
> like arguments and/or return value, whose length isn't fixed and
> depend on the context.
>
> Examples:
>
> CGColorRef CGColorCreate ( CGColorSpaceRef colorspace, const float
> components[] );
> // 'components' length depends on the colorspace (it's the number of
> colors + 1)
>
> const float *CGColorGetComponents ( CGColorRef color );
> // the return value also depends on the chosen colorspace
>
> Before it was necessary to deal with Array#pack, String#unpack and
> OSX::ObjCPtr.
>
> Now you can also write:
>
>      components = [0.1, 0.5, 0.9, 0]
>      color = CGColorCreate(CGColorSpaceCreateDeviceRGB(), components)
> # (1)
>      components2 = CGColorGetComponents(color) # (2)
>      p components2[0]
>
> Technically,
>
> (1) RubyCocoa is now able to convert a Ruby array to this kind of  
> _C_PTR
> (2) RubyCocoa has no way to know the size of the returned array, so it
> still returns an OSX::ObjCPtr object. But it's now possible to call
> OSX::ObjCPtr#[] to retrieve arbitrary elements from the pointer.
>
> Of course, the user needs to be very careful when writing such code.
> Passing a array of non-expected length and/or trying to access an
> element at a non-expected index can crash the current application. But
> this kind of problems exist in C/ObjC too, and also with the previous
> way (using the packing functions).
>
> Laurent
> _______________________________________________
> Rubycocoa-devel mailing list
> Rubyc****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/rubycocoa-devel




More information about the Rubycocoa-devel mailing list
アーカイブの一覧に戻る