On 8/23/2009 11:52 PM, Saptarshi Guha wrote:
Hello,
Suppose I have the function
SEXP foo(){
SEXP s;
PROTECT(s=allocVector(...))

....
UNPROTECT(1);
return(s)
}

y=foo() // foo is a recusrive call

Q: Am i correct in understanding that one does not need to write
PROTECT(y=foo()) ?(and a corresponding unprotect  later on)
since it is the object that is protected , SEXP is an alias for
SEXPREC* and allocVector probably does some memory allocation which
does not get freed
when foo returns.

Whether y needs protecting depends on what happens between the y = foo() call and the time you return to R. If nothing happens, i.e. you just return y to R, then you're safe. If you do any memory allocations after that call before returning to R then y will need to be protected.

Duncan Murdoch

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to