[Rd] memory allocation problem under linux
Martyn Plummer
plummer at iarc.fr
Mon Jun 13 15:09:55 CEST 2005
On Mon, 2005-06-13 at 12:12 +0200, antonio.dinarzo at studio.unibo.it
wrote:
> Scrive Prof Brian Ripley <ripley at stats.ox.ac.uk>:
>
> > You keep on sending similar messages -- this is at least the third. You
> > need to find out where the segfault is occurring using gdb, and you have
> > not told us.
>
> Sorry for the repeated post (in 2 different mailing lists).
> Tnx for your suggestion. Now I think I've found the problem. Try this:
> ////file foo.c
> #include <R.h>
> int **box;
> void foo(){
> int i;
> box = (int**)R_alloc(1, sizeof(int *));
> }
> /////////////
> Compiled with R CMD SHLIB foo.c
> In R:
> >dyn.load("foo.so")
> >.C("foo")
> *Segmentation fault*
> The problem disappears when the declaration of 'box' comes inside the function
> foo... Is this a bug?
It gives you a hint about what the problem is. Your global variable
"box" is conflicting with another symbol. I tracked this down to the
ncurses library, to which R is linked under Linux, but not Windows.
[martyn at seurat ~]$ nm /usr/lib/libncurses.so | grep box -
07a6d036 T box
This explains why your problem is platform-specific. You should declare
"box" to be static.
M.
More information about the R-devel
mailing list