应用程序崩溃来自jni的return语句而没有错误消息

时间:2014-01-27 10:08:40

标签: java c java-native-interface

我正在编写一个进行大量计算的引擎。 引擎用c / c ++编写,并返回一个3-d双数组到本机。 当我尝试运行应用程序时,本机通过执行所有计算的jni到c代码进行调用,并且在返回语句中应用程序崩溃。 相同的代码是

原型声明是:

JNIEXPORT jobjectArray JNICALL Java_com_example_testbi_MainActivity_EngineCalculations
   (JNIEnv *env,jobject this)

之后进行主要计算,然后返回逻辑为:

    doubleArrayClass = (*env)->FindClass(env,"[[D");
    __android_log_print(ANDROID_LOG_INFO, "Engine","\n!* doubleArrayClass declared..."); 
     innerdoubleArrayClass = (*env)->FindClass(env,"[D");
    __android_log_print(ANDROID_LOG_INFO, "Engine","\n!* innerdoubleArrayClass declared..."); 
     returnArray = (*env)->NewObjectArray(env,5,doubleArrayClass,NULL);

    __android_log_print(ANDROID_LOG_INFO, "Engine","\n!* returnArray declared..."); 
    for(i = 0;i < 3;i ++)
    {
        __android_log_print(ANDROID_LOG_INFO, "Engine","\n!* inside for loop of i...%d",i); 
             outerArray = (*env)->NewObjectArray(env,ProductDetails.iPolicyTerm+1,innerdoubleArrayClass,NULL);
            for(j = 0;j <= ProductDetails.iPolicyTerm;j ++)
            {
                __android_log_print(ANDROID_LOG_INFO, "Engine","\n!* inside for loop of j...%d",j); 
                 doubleArray = (*env) -> NewDoubleArray(env,15);
                if(i == 0 || i == 1)
                {
                    __android_log_print(ANDROID_LOG_INFO, "Engine","\n!* inside if loop of i :%d",i); 
                    (*env) -> SetDoubleArrayRegion(env,doubleArray,0,15,(jdouble*)dReturnArray[i][j]);
                }
                if(i == 2)
                {
                    __android_log_print(ANDROID_LOG_INFO, "Engine","\n!* inside if loop of i :%d",i); 
                    (*env) -> SetDoubleArrayRegion(env,doubleArray,0,2,(jdouble*)dOtherCalculatedValues[j]);
                }

                (*env) -> SetObjectArrayElement(env,outerArray,(jsize)j,doubleArray);

                (*env) -> DeleteLocalRef(env,doubleArray);

            }
            __android_log_print(ANDROID_LOG_INFO, "Engine","\n!* completed j loop ..."); 
        (*env) -> SetObjectArrayElement(env,returnArray,(jsize)i,outerArray);
        __android_log_print(ANDROID_LOG_INFO, "Engine","\n!* completed j loop .2nd time.."); 
        (*env) -> DeleteLocalRef(env,outerArray);
        __android_log_print(ANDROID_LOG_INFO, "Engine","\n!* completed DeleteLocalRef"); 
    }
    __android_log_print(ANDROID_LOG_INFO, "Engine","\n!* returning retuirn array...."); 

}

return returnArray;

我看到的日志是:

  

01-27 09:53:39.272:I / Engine(4594):!* if if i:2

     

01-27 09:53:39.272:I / Engine(4594):!*已完成j循环......

     

01-27 09:53:39.272:I / Engine(4594):!*完成了j循环.2nd时间..

     

01-27 09:53:39.272:I / Engine(4594):!*已完成DeleteLocalRef

     

01-27 09:53:39.272:I / Engine(4594):! *返回retuirn数组......

之后应用程序崩溃。

0 个答案:

没有答案