From kriegstn at yahoo.de  Tue Feb 21 20:48:10 2006
From: kriegstn at yahoo.de (Bernd Kriegstein)
Date: Tue, 21 Feb 2006 20:48:10 +0100 (CET)
Subject: [Rd] simple C function segfaults
In-Reply-To: <Pine.OSF.4.58.0602202348210.91966@wotan.mdacc.tmc.edu>
Message-ID: <20060221194810.46878.qmail@web27414.mail.ukl.yahoo.com>

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
>



[Rd] simple C function segfaults
Bernd Kriegstein