[Rcpp-devel] Segfault, is it because of iterators/pointers?
Dirk Eddelbuettel
edd at debian.org
Tue Feb 11 15:44:56 CET 2014
In essence: "Yes"
On 11 February 2014 at 15:18, Alessandro Mammana wrote:
| 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.
Use a debugger:
R -d gdb
and then proceed as normal.
Make sure your compiler flags include -g as well.
Dirk
| 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 at lists.r-forge.r-project.org
| https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
--
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
More information about the Rcpp-devel
mailing list