Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
How to pass C pointers to Caml
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Goswin von Brederlow <goswin-v-b@w...>
Subject: Re: [Caml-list] How to pass C pointers to Caml
Florent Monnier <> writes:

> Le lundi 1 mars 2010 04:55:00, Jianzhou Zhao a écrit :
>> I have been calling OCaml code from C in my project.
>> The C code has some pointers to C structures.
>> I got 'seg fault' when calling the OCaml function receiving
>> C structure pointers.
>> 18.7 at
>> gives the examples that pass int into OCaml. These examples work for me.
>> But, Does OCaml support to pass C structure pointers to OCaml?
> Yes it does. Just cast your pointer to the type value.
> In this tutorial there is an example "Pointers to C structures":
> the pointer to a C struct is wrapped on the ocaml side by an abstract type 
> called "t" here, and it is provided back to C with print_t / dump_ptr.

The problem with this trivial approach is that ocaml can store the
pointer somewhere. When the C pointer is freeed then ocaml has a
dangling pointer. Worse, if the GC allocates a new heap then the pointer
might suddenly point into the heap and then BOOM.

It is better to put the pointer into an abstract or custom block.