From kriegstn at yahoo.de  Tue Feb 21 05:42:45 2006
From: kriegstn at yahoo.de (Bernd Kriegstein)
Date: Tue, 21 Feb 2006 05:42:45 +0100 (CET)
Subject: [Rd] simple C function segfaults
Message-ID: <20060221044245.33844.qmail@web27412.mail.ukl.yahoo.com>

Hello,

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:

--- file 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 ) {
        int i, j;
        GetRNGstate();
        for ( i=0; i<n; i++ ) {
                for ( j=0; j<m; j++ ) {
                        y[ COLM( i,j,m ) ] = rnorm( 0,
1 );
                }
        }
        PutRNGstate();
}
---------


--- file pico.R

dyn.load("pico.so");
if( is.loaded( symbol.C( "pico" ) ) )
n<-10; m<-5;
y<-matrix( 0, n, m );
a<- .C( "pico", as.double(y), as.integer(n),
as.integer(m) );

-----

The code, when executed within R, gives a segmentation
fault. I looked at the writing R extensions, but not
much can be inferred from there on the subject. In
fact, I would be indebted if I could have a pointer to
a beginnner's guide to the R API.

Thank you for any answers,

- b.

PS. if this is not the appropriate section of R
maillists that this post should be in, I apologise in advance.



[Rd] simple C function segfaults
Bernd Kriegstein