Hello, >From what I understood from the documentation I found, when using the inline cfunction with convention=".C", R raw vectors should be given as unsigned char* to the C function.
But consider the following script: library(inline) testRaw <- cfunction(signature(raw='raw', len='integer') , body=' int l = *len; int i = 0; Rprintf("sizeof(raw[0])=%i\\n", sizeof(raw[0])); for (i = 0; i < l; ++i) Rprintf("%i, ", (int)raw[i]); for (i = 0; i < l; ++i) raw[i] = i*10; ' , convention=".C", language='C', verbose=TRUE ) tt <- as.raw(1:10) testRaw(tt, length(tt)) When I execute it: $ R --vanilla --quiet < work/inline_cfunction_raw_bug.R sizeof(raw[0])=1 192, 216, 223, 0, 0, 0, 0, 0, 224, 214, *** caught segfault *** address (nil), cause 'unknown' Traceback: 1: .Primitive(".C")(<pointer: 0x7eff8bd605c0>, raw = as.character(raw), len = as.integer(len)) 2: testRaw(tt, length(tt)) aborting ... Segmentation fault (core dumped) I was expecting to get in the C function a pointer on a byte array of values (1,2,3,4,5,6,7,8,9,10). Apparently that is not the case. I guess that the "raw = as.character(raw)," printed in the traceback is responsible for the observed behavior. If it is expected behavior, how can I get a pointer on my array of bytes ? Thanks. Karl ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel