On 10 June 2020 at 01:21, Leonardo Silvestri wrote: | The discussion you mention is most likely relevant here - other people | more versed than me in valgrind and R's memory allocation could probably | attest to that. | | Another idea to detect these errors would be to create a modified Rcpp | package where the C++ subscript operator [] is modified to check for | size and report an incorrect dereferencing.
There is a very cute and less-than-a-dozen-lines class Vec in Stroustrup's "A Tour of C++" (2nd ed, 2018, section 11.2). The std::Vec inherits "everything" from std::vector but then redefines 'T& operator[](int i)' and 'const R& operator[](int i) const' to use .at(i) and provide range checking. The discussion there is brief, but good. Range checking introduces about 10% overhead. Quoting: "However, experience shows that such overhead can lead people to prefer the far more unsafe builtin arrays.". Well put. He also notes that "some implementations" offer this via a compile-time option. Seems like an opportunity for someone to get famous and add a #define to Rcpp to support this too. Well written PRs, ideally supported by more than merely superficial testing, are always welcome. Dirk -- http://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org _______________________________________________ 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