Hi all, I got another segfault using Rcpp. It is very difficult to understand where it happens and to reduce it to a minimal example, so for now I am not posting very precise code here, but I have a suspicion, maybe you could help me saying if my suspect is right.
I am doing something similar: in a .cpp file: @@@@@@@@@@@@@@@@@@@ struct GapMat { int* ptr; int* colset; int nrow; int ncol; inline int* colptr(int col){ return ptr + colset[col]; } GapMat(){} GapMat(int* _ptr, int* _colset, int _nrow, int _ncol): ptr(_ptr), colset(_colset), nrow(_nrow), ncol(_ncol){} }; // [[Rcpp::export]] IntegerVector colSumsGapMat(Rcpp::IntegerVector vec, Rcpp::IntegerVector pos, int nrow){ GapMat mat(vec.begin(), pos.begin(), nrow, pos.length()); IntegerVector res(pos.length()); for (int i = 0; i < pos.length(); ++i){ for (int j = 0; j < nrow; ++j){ res[i] += mat.colptr(i)[j]; } } return res; } @@@@@@@@@@@@@@@@@@@@@ from R: vec <- a very big integer vector nrow <- 80 pos <- a very big subset of positions, such that max(pos) + nrow < length(vec) colsums <- colSumsGapMat(vec, pos, nrow) from time to time I get a segfault. Note: this is not exactly the code that produces the segfault (because that one is very complicated), so it might be that this code is totally fine. My suspicion: I am using the pointer "vec.begin()", but then I am allocating new memory in the R area of memory with "IntegerVector res(pos.length())" and R decides to move the original values of "vec" to some other place, making the pointer invalid. Is that possible???? Sorry for being very vague and thx in advance!!! Ale -- Alessandro Mammana, PhD Student Max Planck Institute for Molecular Genetics Ihnestraße 63-73 D-14195 Berlin, Germany _______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel