Dear listers,

 

a few days ago I asked a question about a problem I had with a C function 
programmed by myself to be called from R. Thanks to your help, I have been able 
to look a bit further into it, so now I can be a bit more specific when telling 
what happens.

 

The fact is that, when my C function finishes its execution (after calling it 
via the ".C" interface), R seems ok but then crashes when the garbage collector 
executes, giving a segmentation fault.

 

As some of you suggested, I have executed my function with valgrind, and I get 
no memory errors, but some memory leaks (which I am not able to locate although 
compiling my program with the -c flag), and I also get the memory error from 
RunGenCollect: (which I suppose is causes the segmentation fault). You can see 
a small piece of the valgrind output below

 

Using gctorture to make the garbage collector crash inside the execution of my 
program didn't work (my program finished). The question is: what are the 
typical programming errors that can make R garbage collector crash? Could it be 
because of these memory leaks? If so, how could I trace them? I have tried it, 
but running my program with gdb is not an easy task to do, as it performs a 
huge number of iterations.

 

Thank you very much in advance for your help. I would appreciate any hint that 
could help me solve this tricky problem.

 

Best regards,

 

Xavier Solé.

 

-----------

### This is one of the memory leaks

==9370== 162 (160 direct, 2 indirect) bytes in 1 blocks are definitely lost in 
loss record 11 of 42

==9370==    at 0x4A19D35: malloc (vg_replace_malloc.c:149)

==9370==    by 0x84490E0: ???

==9370==    by 0x844D346: ???

==9370==    by 0x4BBE1A2: do_dotCode (in /usr/lib64/R/lib/libR.so)

==9370==    by 0x4BE9035: Rf_eval (in /usr/lib64/R/lib/libR.so)

==9370==    by 0x4BEBA3F: do_set (in /usr/lib64/R/lib/libR.so)

==9370==    by 0x4BE8E5E: Rf_eval (in /usr/lib64/R/lib/libR.so)

==9370==    by 0x4BEAF0D: do_begin (in /usr/lib64/R/lib/libR.so)

==9370==    by 0x4BE8E5E: Rf_eval (in /usr/lib64/R/lib/libR.so)

==9370==    by 0x4BE9711: Rf_applyClosure (in /usr/lib64/R/lib/libR.so)

==9370==    by 0x4BE9107: Rf_eval (in /usr/lib64/R/lib/libR.so)

==9370==    by 0x4BEBA3F: do_set (in /usr/lib64/R/lib/libR.so)

 

### This is the RunGenCollect memory error

==9370== Invalid write of size 8

==9370==    at 0x4C1F73A: RunGenCollect (in /usr/lib64/R/lib/libR.so)

==9370==    by 0x4C23E55: R_gc_internal (in /usr/lib64/R/lib/libR.so)

==9370==    by 0x4C22DC3: Rf_cons (in /usr/lib64/R/lib/libR.so)

==9370==    by 0x4C23AE1: Rf_allocList (in /usr/lib64/R/lib/libR.so)

==9370==    by 0x4B6926B: installAttrib (in /usr/lib64/R/lib/libR.so)

==9370==    by 0x4B69961: Rf_classgets (in /usr/lib64/R/lib/libR.so)

==9370==    by 0x4B68DC1: Rf_setAttrib (in /usr/lib64/R/lib/libR.so)

==9370==    by 0x4B69A40: do_classgets (in /usr/lib64/R/lib/libR.so)

==9370==    by 0x4BE908E: Rf_eval (in /usr/lib64/R/lib/libR.so)

==9370==    by 0x4BEB6FD: applydefine (in /usr/lib64/R/lib/libR.so)

==9370==    by 0x4BEBAE3: do_set (in /usr/lib64/R/lib/libR.so)

==9370==    by 0x4BE8E5E: Rf_eval (in /usr/lib64/R/lib/libR.so)

==9370==  Address 0x10 is not stack'd, malloc'd or (recently) free'd

 


        [[alternative HTML version deleted]]

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to