On Apr 14, 2010, at 7:50 AM, Dominick Samperi wrote: > Consider the C (or C++) code called from the .Call interface: > SEXP foo() { > SEXP *p = PROTECT(allocVector(REALSXP, 10)); > ... > UNPROTECT(1); > return p; > } > > Why is there no danger that the allocated memory will be garbage > collected after the UNPROTECT, but before the return of p? > > I have used code like this for some time and have never had a > problem, but I'm not sure if/why it is guaranteed to work.
Garbage collection is only triggered by allocation. The hard bit is to remember exactly which programming constructs might allocate something, but in the above, there aren't any. You need to watch out with the unprotected return value, though: fee(foo(), fum()) is a standard bug source if fum() allocates. -- Peter Dalgaard Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Email: pd....@cbs.dk Priv: pda...@gmail.com ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel