[Rd] simple C function segfaults

Bernd Kriegstein
2006-02-21T19:48:10Z

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,

- b.

--- Paul Roebuck <roebuck at mdanderson.org> schrieb:

> 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 at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>