[Rd] Basic Question regarding PROTECT
Sapsi
saptarshi.guha at gmail.com
Mon Aug 24 15:10:13 CEST 2009
Hello
Thank you for the response. So if my call is
y=foo()
z=malloc ( by memory allocations , do you mean via R_alloc and
allocVector and malloc or just the former two)
Other statements
Then I need to protect y. And in my case I don't return to R since I
have embedded it.
Why is this the case I.e if I perform mem allocs , I need to protect y
On Aug 24, 2009, at 8:18 AM, Duncan Murdoch <murdoch at stats.uwo.ca>
wrote:r
C
> 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
More information about the R-devel
mailing list