<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>
<pre style="line-height: 17px; white-space: normal; color: rgb(42, 42, 42); background-color: rgb(255, 255, 255); "><font face="Verdana">(Apologies for sending this twice -- the formatting on the first email got completely mangled)</font></pre><pre style="line-height: 17px; white-space: normal; color: rgb(42, 42, 42); background-color: rgb(255, 255, 255); "><font face="Verdana"><br>Are there any known issues regarding memory corruption caused by lists created inside of Rcpp? I started noticing some inconsistencies in the data returned by my app, and was able to reduce the issue to the following reproducible example. It seems to suggest that lists created in Rcpp and returned to R can cause sporadic memory corruption. See code below for a demonstration:<br><br></font><div style="color: rgb(34, 34, 34); line-height: normal; background-color: rgba(255, 255, 255, 0.917969); "><div><font face="Verdana">require(inline)</font></div><div><font face="Verdana">require(Rcpp)</font></div><div><font face="Verdana"><br></font></div><div><font face="Verdana">testFun <- local( {</font></div><div><font face="Verdana">    fun <- cxxfunction(</font></div><div><font face="Verdana">        signature(), '</font></div><div><font face="Verdana"><span style="white-space: pre-wrap; ">         </span>return Rcpp::List::create(Rcpp::<wbr>Named( "testVar" ) = wrap(10));</font></div><div><font face="Verdana">        ', plugin = "Rcpp" )</font></div><div><font face="Verdana"><br></font></div><div><font face="Verdana">    function(){</font></div><div><font face="Verdana">        fun()</font></div><div><font face="Verdana">    }</font></div><div><font face="Verdana">} )</font></div><div><font face="Verdana"><br></font></div><div><font face="Verdana"># generate the result set -- you would expect a numeric vector that consists of repetition of the value 10</font></div><div><font face="Verdana">testOutcome = mapply(</font></div><div><font face="Verdana"><span style="white-space: pre-wrap; ">      </span>function(i) {</font></div><div><font face="Verdana"><span style="white-space: pre-wrap; ">               </span>fTouch = testFun()</font></div><div><font face="Verdana"><span style="white-space: pre-wrap; ">          </span>return(fTouch$testVar)</font></div><div><font face="Verdana"><span style="white-space: pre-wrap; ">      </span>},</font></div><div><font face="Verdana"><span style="white-space: pre-wrap; ">  </span>1:5612062)</font></div><div><font face="Verdana"><br></font></div><div><font face="Verdana"># The result ensd up being something other than what you'd expect</font></div><div><font face="Verdana">typeof(testOutcome)<span style="white-space: pre-wrap; ">  </span></font></div><div><font face="Verdana">for (i in 1:length(testOutcome)) {</font></div><div><font face="Verdana"><span style="white-space: pre-wrap; "> </span>if (testOutcome[[i]] != 10) {</font></div><div><font face="Verdana"><span style="white-space: pre-wrap; ">               </span>cat(i, "\n")</font></div><div><font face="Verdana"><span style="white-space: pre-wrap; ">      </span>}</font></div><div><font face="Verdana">}</font></div></div><font face="Verdana"><br class="Apple-interchange-newline">You'll notice two things here. First, mapply fails to coerce the returned results to a vector (since in some cases the return from testFun seems to have more than 1 element) and second, not all return values are equal to 10, as you would expect. The actual position in the vector of the corrupted data is sporadic. If you keep running this over and over again, you'll see the wrong value in different places. Sometimes you can even get R to crash after multiple runs. On rare occasions there will be no errors at all. For some reason you tend to see the most errors on the first run, especially if you open a new instance of R.<br><br></font></pre><pre style="line-height: 17px; white-space: normal; color: rgb(42, 42, 42); background-color: rgb(255, 255, 255); "><font face="Verdana">If you replace the line "fTouch = testFun()" with a native call to R "fTouch = list(testVar = 10)" then everything works fine. Also returning a NumericVector instead of a list also works fine -- the issue seems to appear after encapsulating the return value in a list inside of Rcpp.</font></pre><pre style="line-height: 17px; white-space: normal; color: rgb(42, 42, 42); background-color: rgb(255, 255, 255); "><font face="Verdana">I am using R 2.14.2 on Win32 & Win64. Rcpp version 0.9.10.<br><br>Thanks</font><span style="font-family: Verdana; font-size: 10pt; ">,<br></span><span style="font-size: 10pt; font-family: Verdana; ">Ilya</span><span style="font-size: 10pt; font-family: Verdana; "> </span></pre>                                         </div></body>
</html>