On Sat, 13 Oct 2007, Bernardo Lagos Alvarez wrote:

> Hi all,
>
> here others doubts, when load and running the function
>
> void gdot(double *x,double *y,int *n,double *output){
> int i;
> *output=0;
> for (i=0;i<*n;i++){
> *output+=x[i]*y[i];
> }
> }
>
>
> as following
>
> /examplesC$ R CMD SHLIB xby.c
> gcc -std=gnu99 -I/usr/share/R/include -I/usr/share/R/include      -fpic  -g 
> -O2 -c xby.c
> -o xby.o
> gcc -std=gnu99 -shared  -o xby.so xby.o   -L/usr/lib/R/lib -lR
>
> /examplesC$ R
>> x<-c(1,4,6,2)
>> y<-c(3,2.4,1,9)
>> dyn.load("xby.so")
>> product<-.C("gdot",myx=as.double(x),myy=as.double(y),myn=as.integer(NROW(x)),myoutput=numeric())

> *** caught segfault ***
> address (nil), cause 'memory not mapped'
>
> Traceback:
> 1: .C("gdot", myx = as.double(x), myy = as.double(y), myn = 
> as.integer(NROW(x)),
> myoutput = numeric())
>
> Possible actions:
> 1: abort (with core dump)
> 2: normal R exit
> 3: exit R without saving workspace
> 4: exit R saving workspace
> Selection:
> Selection:
> Selection:
>
>
> Can anybody answerme that happening with this Traceback?

Yes. It detects that your routine has caused a segfault.

You need to be very careful in constructing .C() calls. A _little_ mistake 
there will cause loads of problems.

As section 5.2 of Writing R Extensions says

"Note that we take care to coerce all the arguments to the correct R 
storage mode before calling .C; mistakes in matching the types can lead to 
wrong results or hard-to-catch errors."

Also, if you get the length of one or more arguments wrong this will cause 
problems.

Try to dissect your R code little by little. I suggest 
you do this

product.call.args <-
                list( "gdot",
                myx=as.double(x),
                myy=as.double(y),
                myn=as.integer(NROW(x)),
                myoutput=numeric() )

Can you see your mistake yet?

If not now do

        print( product.call.args )

If you still cannot see your mistake look hard at 'myoutput' and the C 
code.

How much storage was allocated to 'output' ??

How much does it need ??

HTH

Chuck
>
>
> Thanking you in advance,
> Bernardo Lagos A.
>
> ______________________________________________
> R-help@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

Charles C. Berry                            (858) 534-2098
                                             Dept of Family/Preventive Medicine
E mailto:[EMAIL PROTECTED]                  UC San Diego
http://famprevmed.ucsd.edu/faculty/cberry/  La Jolla, San Diego 92093-0901

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to