From jonathan.zhou at utoronto.ca  Wed Jul 25 17:35:57 2007
From: jonathan.zhou at utoronto.ca (Jonathan Zhou)
Date: Wed, 25 Jul 2007 08:35:57 -0700 (PDT)
Subject: [Rd] Using R_MakeExternalPtr
Message-ID: <11785023.post@talk.nabble.com>


Hi all, 

I've been writing a package and I've run into a problem that I'm unsure how
to solve.  I am looking to pass a C++ class object to R so that it may be
passed back to another C++ function later on to be used.  I'm quite new to R
and this is my first time writing a package, so I hope you can bear with me.  

The following is how I create the class and use R_MakeExternalPtr().  This
occurs in a function called "soamInit": 
    Session* sesPtr = conPtr->createSession(attributes);
    void* temp = session;

    SEXP out = R_MakeExternalPtr(temp, R_NilValue, R_NilValue);
    return out;

The following is how I try to retrieve the class object in a different C++
function called "soamSubmit", where sesCon is the externalPtr : 
	void* temp = R_ExternalPtrAddr(sesCon);
        Session* sesPtr = reinterpret_cast<Session*>(temp);

The error I get when trying to run the R function is : 
 *** caught segfault ***
address 0x3, cause 'memory not mapped'

Traceback:
 1: .Call("soamSubmit", counter, sesCon, final.script, packages)
 2: soam.Rapply(x, tester, join.method = c, njobs = 2)

So it seems like a scoping problem to me, though I'm unsure how to solve it.  

-Jon
-- 
View this message in context: http://www.nabble.com/Using-R_MakeExternalPtr-tf4142904.html#a11785023
Sent from the R devel mailing list archive at Nabble.com.



[Rd] Using R_MakeExternalPtr
Jonathan Zhou