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.