Re: [Rd] simple C function segfaults

From: Bernd Kriegstein <kriegstn_at_yahoo.de>
Date: Tue 21 Feb 2006 - 19:48:10 GMT


Thank you very much for the answer. As a general principle, when and why should I register the counters? Should I do the same in matrices or other parameters that I pass and alter in the main body of the C function?

Thanks again,

> On Tue, 21 Feb 2006, Bernd Kriegstein wrote:
>
> > I use the simplest of examples that somebody can
> think
> > of in order to generate a matrix of random numbers
> > from within C, calling appropriate R functions.
> The
> > concrete example is below:
> > [SNIP]
>
> ------ pico.c --------
> #include <stdio.h>
> #include <stdlib.h>
> #include <math.h>
> #include <R.h>
> #include <Rmath.h>
>
> #define COLM(i,j,m) ((m * j) + i)
>
> void pico(double *y, int *n, int *m) {
> register int i;
>
> GetRNGstate();
> for (i = 0; i < *n; i++) {
> register int j;
>
> for (j = 0; j < *m; j++) {
> y[COLM(i,j,*m)] = rnorm(0.0, 1.0);
> }
> }
> PutRNGstate();
> }
>
> ------ pico.R --------
> dyn.load("pico.so")
> n <- 10
> m <- 5
> ans <- .C("pico",
> as.double(matrix(0, n, m)),
> as.integer(n),
> as.integer(m))
> str(ans[[1]])
>
> ----------------------
>
> $ R CMD SHLIB pico.c
> $ R --vanilla < pico.R
>
>



> SIGSIG -- signature too long (core dumped)
>
> ______________________________________________
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Wed Feb 22 06:53:47 2006

This archive was generated by hypermail 2.1.8 : Tue 21 Feb 2006 - 22:34:55 GMT