[Rcpp-devel] RNGScope does work?

Carlos Almeida calmeida at ma.tum.de
Thu Feb 17 18:16:23 CET 2011


Hi,

I'm new by using C++ and Rcpp, but I wrote an minimal example which 
shows the problem:

------------------------

require( inline )
require( Rcpp )


src <- '
     RNGScope scope;
     //GetRNGstate();

     int NN = INTEGER(sNN)[0];
     int T = INTEGER(sT)[0];

     Rcpp::NumericMatrix lar(T+1,NN);
     Rcpp::NumericMatrix la1r(T+1,NN);

     Rcpp::NumericVector epsr(NN*(T+1));
     epsr = rnorm((T+1)*NN,0.0,1.0); // check

     Rcpp::List res = Rcpp::List::create(Rcpp::Named("gamma") = lar);

     //PutRNGstate();
     return(res);
'

inc <- '


using namespace Rcpp;
using namespace std;

#include <stdio.h>
#include <Rmath.h>

'



fun <- cfunction(signature(sNN="integer", sT="integer"),
                  src,
                  includes=inc,
                  Rcpp=TRUE,
                  cppargs="-I/usr/include")


a <- fun(10L,1000L)$gamma[-1,]


for (i in 1:10000){
a <- fun(10L,1000L)$gamma[-1,]
#if(i%%100 ==0)
    cat(i,"\n")
}

--------------------------------------------------------------

The output of this script is random, some times it runs without problem, 
but often the output is like as:
________________________________

....
639
640
641

  *** caught segfault ***
address 0x28, cause 'memory not mapped'

Possible actions:
1: abort (with core dump, if enabled)
2: normal R exit
3: exit R without saving workspace
4: exit R saving workspace

  ____________________________________

The problem seems to be solved by using
GetRNGstate();  and
PutRNGstate();


Any help greatly appreciated.
Cheers,


-- 

Dr. Carlos Almeida
Technische Universitaet Muenchen
Zentrum Mathematik
Lehrstuhl fr Mathematische Statistik
Boltzmannstr. 3
85747 Garching
Germany

phone: +49-89-289-17439
fax: +49-89-289-17435

email: calmeida at ma.tum.de
http://www-m4.ma.tum.de/m4/pers/almeida/index.html





More information about the Rcpp-devel mailing list