[Rcpp-devel] Segfault, is it because of iterators/pointers?
Dirk Eddelbuettel
edd at debian.org
Wed Feb 12 14:20:08 CET 2014
On 12 February 2014 at 13:36, Alessandro Mammana wrote:
| Ah wait, my bad (as always T.T), I found a much simpler explanation:
Isn't it lovely when persistence pays off? ;-)
| colset <- sample(3e7-nr, 1e7)
| storage.mode(colset)
| [1] "integer"
| storage.mode(colset-1)
| [1] "double"
|
| So when I was unwrapping colset I allocated new memory in Rcpp to
| convert from double to integer, which was no longer valid when I went
| out of scope.
Well that is sort-of a known issue. Look for discussions of clone() in the
archive.
| I think it is a bit dangerous that you never know if you are
| allocating memory or just wrapping R objects when parsing arguments in
| Rcpp.
| Is there a way of ensuring that NOTHING gets copied when parsing
| arguments? Can you throw an exception if the type you try to cast to
| is not the one you expect?
If you don't require an (implicit) cast and you don't use clone(), nothing
gets copied. That;s how proxy objects around SEXP work.
| You might imagine that with large datasets this is important.
You can also use XPtr, and XPtr in combination with bigmemory's big.matrix,
to keep data away from R.
Dirk
--
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
More information about the Rcpp-devel
mailing list