On 20 July 2009 at 16:06, Dan Kelley wrote: | I am trying to write a C function to create a vector of integers that can be | used by the R calling function. I do not know the size of the vector in the | R calling function. (Well, actually, I have an upper limit on the size, but | that is so large that R cannot allocate it. What I'm doing in the function | is to do a sieving procedure, and the result will be small enough to fit | into my machine's memory.) | | My reading of sections 6.1.1 and 6.1.2 of the guide on writing R extensions | has left me a bit confused. Under R_alloc, I read "R will reclaim the | memory at the end of the call" which seems to suggest the storage won't be | made available afterwards, so that's not what I should use. As for the | alterntaive, under Calloc, I read "This memory lasts until freed by the | user", and it's clear that this is to be done within the C function in | question. | | Summary question: how can I allocate memory withing a C function, making it | available to an R function that calls the C function?
You want R_alloc(). Here, "end of the call" is the call of the R function that calls your C function. This is what you want---the data will be available for the caller of your C code. FWIW R_alloc() is also the only allocation function used in Rcpp (which provides an interface between R and C++). Hth, Dirk -- Three out of two people have difficulties with fractions. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.