Version française
Home     About     Download     Resources     Contact us    
Browse thread
AW: [Caml-list] OCaml-3.08.1/MinGW: alloc_tuple fails
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Bauer, Christoph <Christoph.Bauer@l...>
Subject: AW: [Caml-list] OCaml-3.08.1/MinGW: alloc_tuple fails
> On Thu, Oct 14, 2004 at 04:59:01PM +0200, Bauer, Christoph wrote:
> > 
> > >  >   t = alloc_tuple( 100 );
> > >  >   for( i=0 ; i < 100; ++i )
> > >  >     Store_field( t, i, Int_val ( i ));
> > > 
> > > s/Int_val/Val_int/
> > 
> > 
> > Ok, that's correct. But the problem is before the for-loop.
> 
> It looks correct to me, but often memory corruption happens 
> earlier than is detected.  Try adding a call to Gc.full_major 
> () just before you call your C function.  If it crashes in 
> the Gc, then you've got memory corruption, and you'll need to 
> pepper your code with calls to Gc.full_major () to try and 
> narrow it down.

Ok, my example program is now:

(* test_it.ml *)
external test : unit -> unit = "test"

let _ =
  Gc.full_major ();
  test ()

Here is the gdb-output:

$ gdb ./test_it
GNU gdb 5.2.1
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i686-pc-mingw32"...(no debugging symbols
found)...
(gdb) r
Starting program: c:\bauer\ocaml-mingw\test/./test_it.exe

Program received signal SIGSEGV, Segmentation fault.
0x00335e89 in ?? ()
(gdb) where
#0  0x00335e89 in ?? ()
#1  0x00335f8b in ?? ()
#2  0x10001234 in test (_=1) at test.cpp:10
#3  0x0040155b in camlTest_it__entry ()
#4  0x00402915 in main ()
(gdb)

regards,
Christoph Bauer