[Rd] simple C function segfaults

Paul Roebuck
2006-02-21T06:14:37Z

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)