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