> 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