[Rcpp-devel] tracking volatile bug

William Dunlap wdunlap at tibco.com
Sun Nov 23 21:11:51 CET 2014


> In quickref, all examples pass just numbers without any prior conversion
> to NumericVector or IntegerVector. Strings are exception to this?

Strings are different than numbers in that they don't occupy a fixed
amount of space, so some memory management is needed for them.


Bill Dunlap
TIBCO Software
wdunlap tibco.com

On Sun, Nov 23, 2014 at 11:07 AM, Sokol Serguei <serguei.sokol at gmail.com>
wrote:

> Gabor Grothendieck has written at  Sat, 22 Nov 2014 19:17:27 -0500
>
>> On Sat, Nov 22, 2014 at 1:43 PM, Sokol Serguei<serguei.sokol at gmail.com>
>> wrote:
>>
>>> Let try to stick with regular rcpp code
>>> (file: matrix_norm.cpp):
>>>
>>> //[[Rcpp::depends(RcppArmadillo)]]
>>> #include <RcppArmadillo.h>
>>> using namespace Rcpp;
>>> using namespace arma;
>>>
>>> // [[Rcpp::export]]
>>> double nmat(mat A) {
>>>     Function Matrix_norm_r_=Environment("package:Matrix")["norm"];
>>>     double res=as<double>(Matrix_norm_r_(A, "1"));
>>>     return res;
>>> }
>>>
>>> When called in R as:
>>>
>>> library(Rcpp)
>>> library(Matrix)
>>> sourceCpp("matrix_norm.cpp")
>>> gctorture(TRUE)
>>> nmat(as.matrix(pi))
>>>
>>> it gives an error:
>>> Erreur : 'getCharCE' doit être appelé sur un CHARSXP
>>> (my English translation: Error: 'getCharCE' must be called on CHARSXP)
>>>
>>> Something was irregular on my side here?
>>> Serguei.
>>>
>> Try replacing the line that sets res with:
>>
>>     double res=as<double>(Matrix_norm_r_(NumericMatrix(wrap(A)),
>> CharacterVector::create("1")));
>>
>> Be sure to try it on a fresh session since errors from prior runs
>> could have messed up R.
>>
> Yes, this version works too.
> The least change that leads to a working code that I have found (thanks to
> Martin) is
>
> double res=as<double>(Matrix_norm_r_(A, CharacterVector("1")));
>
> but it is still unclear what is wrong with passing a plain string.
> In quickref, all examples pass just numbers without any prior conversion
> to NumericVector or IntegerVector. Strings are exception to this?
> I have an impression that they are supposed to work too without
> any explicit conversion. If you set gctorture(FALSE), it works and
> there is no warning or error message that plain strings are not supported
> in this place.
> So, gctorture() reveals that somewhere there is an un-protected pointer
> which is getting corrupted. If it is needed to be said, I don't pretend
> that this unprotected pointer is in Rcpp code. May be it is in R, may be
> in Matrix, it is still unclear.
>
> _______________________________________________
> Rcpp-devel mailing list
> Rcpp-devel at lists.r-forge.r-project.org
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20141123/4bdc2e9a/attachment.html>


More information about the Rcpp-devel mailing list