JNI操作C代码返回二维数组数据怎么弄?

有一段C代码如下,想改为JNI方式后生成.so或.dll文件给java调用,但是不知道怎么弄。

/*************************************************************************
* @brief   :  滤波后PPG信号:分割
* @inparam :  double* y    PPG signal
              int lenth   信号长度
* @outparam:  double(*v1)[MAX_LINE]    分割后的二维数组
* @return:  0
* @author  :  YY Chen
* @date    :  2021/08/26 12:40
* @version :  ver 1.0
*************************************************************************/
int Data_segmentation(double* y, double(*v1)[MAX_LINE], int lenth)
{
    int Fsize = 0;
    int flag = 0, flag1 = 0;
    int i, j = 0, m, n;
    double  v[MAX_LINE];
    int count = Overlap_rate;
    //start→Data segmentation
    for (m = 0; m < lenth; m++)
    {
        if (flag == 0) {
            if (y) {
                v[Fsize++] = y[m];
            }
            if (Fsize == MAX_LINE) {
                Fsize = 0;
                for (int i = 0; i < MAX_LINE; i++) {
                    v1[j][i] = v[i];
                }
                j++;
                flag1 = 1;
            }
        }

        if (flag == 1) {
            v1[j][count++] = y[m];
            flag1 = 0;
            if (count == MAX_LINE) {
                count = Overlap_rate;
                j++;
                flag1 = 1;
            }
        }


        if (flag1 == 1) {
            for (int i = Step_length; i < MAX_LINE; i++) {
                v1[j][i - Step_length] = v1[j - 1][i];
            }
            flag = 1;
        }
        if (j == 200) break;

    }
    //end←Data segmentation
    return 0;
}


我自己尝试改了下,但执行报错,不知道哪里有问题,有牛人知道吗?

/*************************************************************************
* @brief   :  滤波后PPG信号:分割
* @inparam :  double* y    PPG signal
              int lenth   信号长度
* @outparam:  double(*v1)[MAX_LINE]    分割后的二维数组
* @return:  0
* @author  :  YY Chen
* @date    :  2021/08/26 12:40
* @version :  ver 1.0
*************************************************************************/
JNIEXPORT jobjectArray JNICALL Java_packecg_Prs_dataSegmentation(JNIEnv *env,jobject obj,jdoubleArray y,jint lenth)
{
    int ONE_DIMENSION = 200;
    int TWO_DIMENSION = 1000;
    double v1[ONE_DIMENSION][TWO_DIMENSION];
    int Fsize = 0;
    int flag = 0, flag1 = 0;
    int i, j = 0, m, n;
    double  v[MAX_LINE];
    int count = Overlap_rate;
    //start→Data segmentation
    //根据Java数组创建C数组,也就是把Java数组转换成C数组
    double *y_buf = (*env)->GetDoubleArrayElements(env,y,0);
    for (m = 0; m < lenth; m++)
    {
        if (flag == 0) {
            if (y_buf) {
                v[Fsize++] = y_buf[m];
            }
            if (Fsize == MAX_LINE) {
                Fsize = 0;
                for (int i = 0; i < MAX_LINE; i++) {
                    v1[j][i] = v[i];
                }
                j++;
                flag1 = 1;
            }
        }

        if (flag == 1) {
            v1[j][count++] = y_buf[m];
            flag1 = 0;
            if (count == MAX_LINE) {
                count = Overlap_rate;
                j++;
                flag1 = 1;
            }
        }

        if (flag1 == 1) {
            for (int i = Step_length; i < MAX_LINE; i++) {
                v1[j][i - Step_length] = v1[j - 1][i];
            }
            flag = 1;
        }
        if (j == 200) break;


    }
    //end←Data segmentation
    
    //start→return array
    jobjectArray jobjArr;
    jclass intArr = (*env)->FindClass(env,"[I");
    jobjArr = (*env)->NewObjectArray(env,ONE_DIMENSION * TWO_DIMENSION, intArr, NULL);
    jint temp[ONE_DIMENSION];
    for (jint i = 0; i < ONE_DIMENSION; i++){
        jintArray colArr = (*env)->NewIntArray(env,ONE_DIMENSION);
        for (jint j = 0; j < TWO_DIMENSION; j++)
        {
            temp[j] = v1[i][j];
        }
        (*env)->SetIntArrayRegion(env,colArr,0,ONE_DIMENSION,temp);
        (*env)->SetObjectArrayElement(env,jobjArr,i,colArr);
        (*env)->DeleteLocalRef(env,colArr);
    }
    return jobjArr;
    //end→return array
    //return 0;
}


大家有知道的吗?可以回复下我