J'ai codé quelques simulations en utilisant inline/RcppArmadillo et j'ai trébuché sur un problème avec RNGScope. Est-ce un bug ou suis-je en train de faire quelque chose de vraiment stupide? J'ai vidé la fonction pour la rendre lisible (voir ci-dessous).Erreur de segmentation RNGscope
Cheers, Ed
library(inline)
code_cpp <- '
using namespace arma;
// From R
uvec x0 = as<uvec>(x0_r);
vec time_vec = as<vec>(time_vec_r);
// Declare variables
umat simulation_data=zeros<umat>(x0.n_elem, time_vec.n_elem);
RNGScope scope;
return wrap(simulation_data);
'
gillespie_sim <- cxxfunction(body = code_cpp,
sig = signature(x0_r = "integer", time_vec_r= "numeric"),
plugin = "RcppArmadillo")
x0 <- c(1,0,0,0,0,0)
time_vec <- 1:800
set.seed(23)
for(i in 1:100000) out2 <- gillespie_sim(x0_r=x0,time_vec_r=time_vec)
L'erreur que je reçois
R (43305) malloc: * erreur pour objet 0x108c30a00: contrôle incorrect pour objet libéré - objet a probablement été modifié après avoir été libéré. * mis un point d'arrêt dans malloc_error_break pour déboguer piège Abandonner: 6
Merci pour la réponse rapide. Je ne sais pas si ça aide, mais si je commente RNGScope et ajoute le GetRNGstate(); PutRNGstate(); Je n'ai plus l'erreur. J'ai pris note de rcpp-devel. Merci, Ed – user2127594
C'est un bon suivi. Mais regardez notre classe RNGScope - c'est aussi simple que possible. Pourquoi cela irait-il mal? –
Oui, c'est juste un moyen intelligent de simplifier les choses RNGstate. Cela ne devrait pas poser de problème. Malheureusement, ma connaissance du C++ est mince, donc je ne sais pas pourquoi ça pourrait tout bousiller. Sur une autre note, pour une raison quelconque, si j'échange l'enveloppe de retour (simulation_data); pour renvoyer un retour de nombre entier (22); il arrête également de s'écraser. Ed – user2127594