Note that there are some explanatory texts on larger screens.

plurals
  1. POAccess violation when using pin_ptr?
    text
    copied!<p>When I use pin_ptr to pass an array in native c code, I get access violation. The code is as bellow:</p> <pre><code>array&lt;float&gt;^ LogLikelihoodScore(array&lt;array&lt;unsigned char&gt;^&gt;^ modelsBuffer , array&lt;float&gt;^ featuresArray, int numberOfFrames) { int i, j, modelsNum = modelsBuffer-&gt;Length, len; float **models = (float**) malloc(modelsNum * sizeof(void*)); for(i = 0; i &lt; modelsNum; i++) { pin_ptr&lt;unsigned char&gt; ptr = &amp;modelsBuffer[i][0]; models[i] = (float*) ptr; } array&lt;float&gt;^ scores = gcnew array&lt;float&gt;(modelsNum); pin_ptr&lt;float&gt; scoresPtr = &amp;scores[0]; pin_ptr&lt;float&gt; featuresPtr = &amp;featuresArray[0]; char* message = CalculateLikelihoodUsingBufferedModels(models, modelsNum, featuresPtr, numberOfFrames, scoresPtr); return scores; } </code></pre> <p>When I changed this code such that allocate new spaces and copy original array to that, I didn't get access violation. New code:</p> <pre><code>array&lt;float&gt;^ LogLikelihoodScore(array&lt;array&lt;unsigned char&gt;^&gt;^ modelsBuffer , array&lt;float&gt;^ featuresArray, int numberOfFrames) { int i, j, modelsNum = modelsBuffer-&gt;Length, len; float **models = (float**) malloc(modelsNum * sizeof(void*)); for(i = 0; i &lt; modelsNum; i++) { len = modelsBuffer[i]-&gt;Length; char* ptr = (char*) malloc(len); pin_ptr&lt;unsigned char&gt; ptr2 = &amp;modelsBuffer[i][0]; memcpy(ptr, ptr2, len); models[i] = (float*) ptr; } array&lt;float&gt;^ scores = gcnew array&lt;float&gt;(modelsNum); pin_ptr&lt;float&gt; scoresPtr = &amp;scores[0]; pin_ptr&lt;float&gt; featuresPtr = &amp;featuresArray[0]; char* message = CalculateLikelihoodUsingBufferedModels(models, modelsNum, featuresPtr, numberOfFrames, scoresPtr); return scores; } </code></pre> <p>Question: Are there any problem in my using from pin_ptr?</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload