[Rcpp-devel] using Rcpp function Module twice triggers segfault
Dirk Eddelbuettel
edd at debian.org
Fri Sep 7 13:52:39 CEST 2012
On 7 September 2012 at 06:40, Dirk Eddelbuettel wrote:
|
| On 6 September 2012 at 23:51, Jiqiang Guo wrote:
| |
| |
| | On Thu, Sep 6, 2012 at 11:43 PM, Dirk Eddelbuettel <edd at debian.org> wrote:
| |
| |
| | On 6 September 2012 at 21:24, Jiqiang Guo wrote:
| | | Dear List,
| | |
| | | In the middle of figure out another problem, I used function Module
| | twice, but
| | | then I got segfault. Is there any solution for this? For the time
| | being, I
| | | really need to call function Module more than once.
| |
| | a) I simply never combine Rcpp modules with inline. With a package, things
| | work.
| |
| |
| | b) In
| |
| | m <- Module("foo1", getDynLib(fx))
| | m2 <- Module("foo1", getDynLib(fx))
| |
| | are you by chance mistaking Module() [ ie the declaration ] with new()
| | [
| | ie the instantiation of an object ] ?
| |
| | No. I am just trying to narrow down what causes the real problem I have. And I
| | think now it is because I called Module a second time. Following Module call, I
| | do have new ....
| |
| | Anyway, the above a) and b) do not explain and solve the problem I have.
|
| Use new() twice to create not two objects.
Sorry, typed too fast: remove the 'not'. If I understand what you want
(which is not clear as you haven't really stated WHY you want to call Module
twice, which you simply should not): use new() twice.
Dirk
|
| Dirk
|
| | Thanks,
| |
| | Jiqiang
| |
| |
| |
| |
| |
| | Dirk
| |
| |
| | | Best,
| | | Jiqiang
| | |
| | | P.S. an example code and the dump of output.
| | | In addition, my sessionInfo()
| | |
| | | > sessionInfo()
| | | R version 2.15.1 (2012-06-22)
| | | Platform: x86_64-pc-linux-gnu (64-bit)
| | |
| | | locale:
| | | [1] LC_CTYPE=en_US.utf8 LC_NUMERIC=C
| | | [3] LC_TIME=en_US.utf8 LC_COLLATE=en_US.utf8
| | | [5] LC_MONETARY=en_US.utf8 LC_MESSAGES=en_US.utf8
| | | [7] LC_PAPER=C LC_NAME=C
| | | [9] LC_ADDRESS=C LC_TELEPHONE=C
| | | [11] LC_MEASUREMENT=en_US.utf8 LC_IDENTIFICATION=C
| | |
| | | attached base packages:
| | | [1] stats graphics grDevices utils datasets methods
| | base
| | |
| | |
| | | other attached packages:
| | | [1] inline_0.3.8 Rcpp_0.9.13
| | |
| | | loaded via a namespace (and not attached):
| | | [1] tools_2.15.1
| | |
| | |
| | | require("Rcpp")
| | | require("inline")
| | |
| | | inc <- '
| | | class Foo {
| | | private:
| | | int x_;
| | | public:
| | | Foo(int x) : x_(x) { }
| | | void setx(int x) { x_ = x;}
| | | int getx() const { return x_;}
| | | };
| | |
| | | RCPP_MODULE(foo1) {
| | | class_<Foo>("Foo")
| | | .constructor<int>()
| | | .method("setx", &Foo::setx)
| | | .method("getx", &Foo::getx)
| | | ;
| | | }
| | | '
| | | fx <- cxxfunction(signature(), "", include = inc, plugin = "Rcpp",
| | verbose = !
| | | TRUE)
| | | m <- Module("foo1", getDynLib(fx))
| | | m2 <- Module("foo1", getDynLib(fx))
| | |
| | | ======
| | |
| | | > m <- Module("foo1", getDynLib(fx))
| | | > m2 <- Module("foo1", getDynLib(fx))
| | | >
| | | > f <- new(m$Foo, 1)
| | | > f2 <- new(m2$Foo, 1)
| | |
| | | *** caught segfault ***
| | | address 0x90, cause 'memory not mapped'
| | |
| | | Traceback:
| | | 1: .Call(symbol)
| | | 2: Module(module, mustStart = TRUE)
| | | 3: .getModulePointer(x)
| | | 4: m2$Foo
| | | 5: .getClassFromCache(Class, where)
| | | 6: getClass(Class, where = topenv(parent.frame()))
| | | 7: new(m2$Foo, 1)
| | | aborting ...
| | |
| | |
| | |
| | | ----------------------------------------------------------------------
| | | _______________________________________________
| | | 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
| |
| |
|
| --
| Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
--
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
More information about the Rcpp-devel
mailing list