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 <murd...@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

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

Reply via email to