[Rcpp-devel] R CMD BATCH - segfault (was: Create and access several instances of a C++ class from R)

soeren.vogel at uzh.ch soeren.vogel at uzh.ch
Fri May 20 12:01:07 CEST 2011


On 18.05.2011, at 15:17, Douglas Bates wrote:

> On May 18, 2011 2:53 AM, <soeren.vogel at uzh.ch> wrote:
> 
>> [...]
>> 
>> When librarying the class, assigning an object, do some calculations,
>> whatever -- everything goes fine. Yet, when using R CMD BATCH on a file
>> listing the same commands as by hand, R produces some nice information at
>> the end, however, here it produces an segmentation fault, which does --
>> according to my small knowledge -- say something bad:
>> 
>> proc.time()
>>  user  system elapsed
>> 0.702   0.017   0.714
>> R(72992) malloc: *** error for object 0x2c9b604: incorrect checksum for
>> freed object - object was probably modified after being freed.
>> *** set a breakpoint in malloc_error_break to debug
>> 
>> *** caught segfault ***
>> address 0x4909d58, cause 'memory not mapped'
>> 
>> Traceback:
>> 1: save(list = ls(envir = .GlobalEnv, all.names = TRUE), file = outfile,
>>    version = version, ascii = ascii, compress = compress, envir =
>> .GlobalEnv,     precheck = FALSE)
>> 2: save.image(name)
>> 3: sys.save.image(".RData")
>> aborting ...
>> 
>> Any idea what goes wrong there?
> 
> As you can see, the problem occurs when R is saving the worksheet.  At
> present an instance of a Rcpp module class cannot be saved. It is likely
> that this will need to be addressed by the person designing each C++ class
> that will be expressed in a module.  R can't serialize the contents of
> memory that it doesn't "own".
> 
> The current fix is "don't do that".  Add the --no-save or --vanilla in your
> call to R CMD BATCH to suppress saving the worksheet.

Hello Douglas

Ah, I see. Thanks for this tip.

However, I am wondering why removing objects and detaching the package (where the Rcpp module resides) do not resolve the issue in the same way:

x <- new(FOO)
do_something_with_x()
rm(x)
detach("package:GUTS")

Regards
*S*



More information about the Rcpp-devel mailing list