[Rd] simple C function segfaults
Bernd Kriegstein
kriegstn at yahoo.de
Tue Feb 21 20:48:10 CET 2006
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
>
More information about the R-devel
mailing list