From murdoch at stats.uwo.ca  Mon Aug 24 14:18:25 2009
From: murdoch at stats.uwo.ca (Duncan Murdoch)
Date: Mon, 24 Aug 2009 08:18:25 -0400
Subject: [Rd] Basic Question regarding PROTECT
In-Reply-To: <1e7471d50908232052y1f4ae6e5p57ad8c9f213ef611@mail.gmail.com>
References: <1e7471d50908232052y1f4ae6e5p57ad8c9f213ef611@mail.gmail.com>
Message-ID: <4A928511.2040607@stats.uwo.ca>

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



[Rd] Basic Question regarding PROTECT
Duncan Murdoch