Le 15 mai 2014 à 09:03, Stefano Calza <steca...@gmail.com> a écrit :

> Hi everybody,
> 
> I am trying to use big.matrix from Rcpp basically to write some (integer) 
> data to a matrix.
> 
> I keep getting segmentation fault due to 'memory not mapped'.
> Debugging with gdb I found out that the critical point is
> 
> MatrixAccessor<int> ma(*pBigMat);
> 
> The function is declared as something like (I just followed the Gallery Rcpp 
> example):
> 
> RcppExport SEXP myFun(SEXP X, SEXP Y, SEXP Z, SEXP XX, XPtr<BigMatrix> 
> pBigMat)
> 
> Basically it cannot get to the correct pointer.
> 
> The really weird thing is that this error happens ONLY using the function 
> built within a package
> 
> .Call('myFun',X,Y,Z,XX,bigMat@address,package='myPackage')
> 
> BUT if I use the very same code, changing just the declaration
> 
> // [Rcpp::export]
> IntegerVector myFun(SEXP X, SEXP Y, SEXP Z, SEXP XX, XPtr<BigMatrix> pBigMat)
> 
> and then
> 
> sourceCpp('mycode.cpp')
> 
> and
> 
> myFun(X,Y,Z,XX,bigMat@address)
> 
> it works fine!
> 
> So what am I doing wrong here? Is the pointer reset somehow? But why only 
> when using .Call version?
> 
> Thanks
> 
> Stefano

If you use a raw .Call, all your parameters have to be SEXP. 
If you want to use other parameter types, such as XPtr<BigMatrix>, you need to 
use attributes (i.e. sourceCpp or compileAttributes) so that it generates .Call 
compatible function for you. 

Romain


_______________________________________________
Rcpp-devel mailing list
Rcpp-devel@lists.r-forge.r-project.org
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

Reply via email to