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
[Caml-list] Toplevel crashes when trying to call external functions
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: art yerkes <ayerkes@s...>
Subject: Re: [Caml-list] Toplevel crashes when trying to call external functions
On Sat, 10 Jul 2004 18:20:47 -0700 (PDT)
Andy Yang <> wrote:

> Hi, all
> I am relatively new to Ocaml. Sorry about the spam if
> this is a trivial problem. I am trying to give call
> some external functions. 
> Some codes are as follows:
> value zchaff_InitManager(void)
> {
>   CAMLparam0();  
>   void * solver = SAT_InitManager();
>   value val = alloc(1, Custom_tag);
>   Int32_val(val) = (int) solver;
>   CAMLreturn ( val );
> }
> void zchaff_ReadCnf(value mng, value filename)
> {
>   CAMLparam2(mng, filename);
>   void* solver = (void*)Int32_val(mng);
>   char * fn = String_val(filename);
>   read_cnf(solver, fn);  
>   CAMLreturn0;
> }

These may not solve this specific problem but I think they are good

17.9.2. Custom blocks must be allocated via the alloc_custom function.
(And remember that the custom block size argument is in bytes).

Passing 1 as the block size to alloc allocates a block with one word
as a tail (at offset 0), but Data_custom_val accesses a value in the
tail at offset 1.  This is probably the error you're looking for.

I don't understand why you're going through Int32_val and Val_int32
to get and set your pointer.  You probably want to write a new macro
that will access the custom area as a pointer-sized chunk on every
architecture.  Assuming pointers to be 32-bits really is a bad idea.
Hey, Adam Smith, keep your invisible hands to yourself!

To unsubscribe, mail Archives:
Bug reports: FAQ:
Beginner's list: