Note that there are some explanatory texts on larger screens.

plurals
  1. POJava JNI - EXCEPTION_ACCESS_VIOLATION while returning jintArray
    primarykey
    data
    text
    <p>A really weird thing happens in this code</p> <pre><code> JNIEXPORT jintArray JNICALL Java_jsdr_SdrLibrary_getTunerGains (JNIEnv * env, jclass obj, jlong pointer) { rtlsdr_dev_t * dev; int * gains; jintArray ji; jint * buff; int i; int size; dev = (rtlsdr_dev_t *) pointer; size = rtlsdr_get_tuner_gains(dev, gains); if (size &lt;= 0) .. throws an error, irrelevant code .. buff = (jint *) malloc(size * sizeof(jint)); for (i = 0; i &lt; size; i++) buff[i] = gains[i]; ji = (*env)-&gt;NewIntArray(env, size); (*env)-&gt;SetIntArrayRegion(env, ji, 0, size, buff); return ji; } </code></pre> <p>The method actually returns a result that I can handle in Java with</p> <pre><code> System.out.println(printArray(SdrLibrary.getTunerGains(pointer))); </code></pre> <p>where printArray is just a simple</p> <pre><code>public static String printArray(int[] arr) { String buff = "["+arr[0]; for (int i = 1; i &lt; arr.length; i++) buff+=", "+arr[i]; return buff+"]"; } </code></pre> <p>The output is the following</p> <pre><code>[-10, 15, 40, 65, 90, 115, 140, 165, 190, 215, 240, 290, 340, 420, 430, 450, 470, 490] # # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d86c2ff, pid=7160, tid=5880 # # JRE version: 6.0_31-b05 # Java VM: Java HotSpot(TM) Client VM (20.6-b01 mixed mode, sharing windows-x86 ) # Problematic frame: # V [jvm.dll+0x7c2ff] # # An error report file with more information is saved as: # C:\Users\Marto\workspace\JSDR\hs_err_pid7160.log # # If you would like to submit a bug report, please visit: # http://java.sun.com/webapps/bugreport/crash.jsp # </code></pre> <p>As you can see it returns a result but immediately after that the JM crashes and no further lines get executed. I would definitely appreciate any help! Thank you!</p> <p><strong>EDIT:</strong> If I remove the call to rtlsdr_get_tuner_gains and instead initialize the gains array manually, no error is observed. Since this method is inside a dll, can I prevent it somehow from crashing the JNI?</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

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