Java Tomcat上的JNI出现致命错误

Java Tomcat上的JNI出现致命错误,java,c,linux,java-native-interface,tomcat7,Java,C,Linux,Java Native Interface,Tomcat7,我在做一个矩阵计算器,通过JNI计算两个矩阵的和。我通过用户输入获得矩阵编号,并将其存储到不同的2D数组中。然后,我将两个二维数组转换为单独的一维数组,以传递给JNI。但我在完成所有这些之后,服务器关闭,我得到以下日志文件: # A fatal error has been detected by the Java Runtime Environment: # # SIGSEGV (0xb) at pc=0x00007f2bf0c012b1, pid=7021, tid=13982498296

我在做一个矩阵计算器,通过JNI计算两个矩阵的和。我通过用户输入获得矩阵编号,并将其存储到不同的2D数组中。然后,我将两个二维数组转换为单独的一维数组,以传递给JNI。但我在完成所有这些之后,服务器关闭,我得到以下日志文件:

# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f2bf0c012b1, pid=7021, tid=139824982963968
#
# JRE version: OpenJDK Runtime Environment (7.0_75-b13) (build 1.7.0_75-b13)
# Java VM: OpenJDK 64-Bit Server VM (24.75-b04 mixed mode linux-amd64 compressed oops)
# Derivative: IcedTea 2.5.4
# Distribution: Ubuntu 14.04 LTS, package 7u75-2.5.4-1~trusty1
# Problematic frame:
# V  [libjvm.so+0x5f62b1]  jni_GetDoubleArrayElements+0x51
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# If you would like to submit a bug report, please include
# instructions on how to reproduce the bug and visit:
#   http://icedtea.classpath.org/bugzilla
#

这是我的名片

    #include <jni.h>
#include <stdio.h>
#include "MatrixCalculator.h"

JNIEXPORT jdoubleArray JNICALL Java_matrixcalculator_MatrixCalculator_summationOfMatricesViaC
  (JNIEnv * env, jobject thisObj, jint jnirow1, jint jnicolumn1, jdoubleArray jniMatrix1, jdoubleArray jniMatrix2)
{

jdouble *doubleCMatrix1 = (*env)->GetDoubleArrayElements(env, jniMatrix1, NULL);
jdouble *doubleCMatrix2 = (*env)->GetDoubleArrayElements(env, jniMatrix2, NULL);

jsize length = (*env)->GetArrayLength(env, jniMatrix1);

jdoubleArray finalSum = (*env)->NewDoubleArray(env, length);

jdouble *preparingSum = (*env)->GetDoubleArrayElements(env, finalSum, NULL);    

    int i;
    for(i = 0; i < length; i++) {
    preparingSum[i] = doubleCMatrix1[i] + doubleCMatrix2[i];    
}
(*env)->ReleaseDoubleArrayElements(env, jniMatrix1, doubleCMatrix1, 0);
(*env)->ReleaseDoubleArrayElements(env, jniMatrix2, doubleCMatrix2, 0);
(*env)->ReleaseDoubleArrayElements(env, finalSum, preparingSum, 0);

return finalSum;

}
我相信转换可能是错误的,它没有得到所有的元素,但我可能是错误的。试图改变不同的时间,但仍然是相同的崩溃。有什么帮助吗


编辑:转换是好的!正在传递无效参数,所以它在如此激烈的事件中崩溃了

解决方案:愚蠢的我,我传递了空参数,这导致了错误。请记住,始终确保您的参数包含数据

 public void convert2To1D(double [][] aMatrix) {

   List<Double> list = new ArrayList<Double>();

    for(int i = 0; i < row2; i++)
        for(int j = 0; j < column2; j++) {
           list.add(aMatrix[i][j]);

        }
        conversion2 = new double[list.size()];
        for(int i = 0; i < conversion2.length; i++)
            conversion2[i] = list.get(i);

}

public void convertTo1D(double [][] aMatrix) {

    List<Double> list = new ArrayList<Double>();

    for(int i = 0; i < row1; i++)
        for(int j = 0; j < column1; j++) {
           list.add(aMatrix[i][j]);

        }
        conversion1 = new double[list.size()];
        for(int i = 0; i < conversion1.length; i++)
            conversion1[i] = list.get(i);


}
 public native double[] summationOfMatricesViaC(int rows, int columns, double[] aMatrix1, double[] aMatrix2);