Subject: [ruby-ffi] why FFI::MemoryPointer is autoconverted into FFI::Pointer in a FFI::Struct? |
From: Jesús GS <blaxter@gmail.com> |
Date: 3/18/11 5:02 AM |
To: ruby-ffi |
Hi, I'm really confuse with this behaviour. I think I'm missing some concept of memory management of ffi. Let's imagine a C library with something like: struct foo { void *p; }; void some_function( struct foo * in_parameter ); From ruby we are gonna create that struct before call the function, with something similar to:
require 'ffi'
=> true
class Foo < FFI::Struct; layout :p, :pointer; end
=> #<FFI::StructLayout:0x1f0f0c8>
foo = Foo.new
=> #<Foo:0x1a15597>
foo[:p] = my_pointer = FFI::MemoryPointer.new(:int, 100)
=> #<MemoryPointer address=0xb3c06380 size=400>
foo[:p]
=> #<Pointer address=0xb3c06380>
my_pointer
=> #<MemoryPointer address=0xb3c06380 size=400> I cannot free a Pointer (only MemoryPointer), so what should I do? Create a free_struct_foo( void * p ); function in C? Ignore it because I don't need to free that allocated memory or just hope no memory leaks will happen?. Regards.