Android getArrayLength()正在返回一个巨大的数字。。。

Android getArrayLength()正在返回一个巨大的数字。。。,android,java-native-interface,Android,Java Native Interface,我试图理解jni,所以我开始破解hellojni,我遇到了这个问题 我的java代码如下所示: short[] buf = new short[16]; Log.d("hello", "before!"); write(buf, 0, 16); jint Java_com_example_hellojni_HelloJni_write(JNIEnv* env, jshortA

我试图理解jni,所以我开始破解hellojni,我遇到了这个问题

我的java代码如下所示:

                    short[] buf = new short[16];
                    Log.d("hello", "before!");
                    write(buf, 0, 16);
jint
Java_com_example_hellojni_HelloJni_write(JNIEnv* env, jshortArray buf, jint off, jint len)
{
    char debug[1024];
    int ii = 0;
    jsize cbuflen = (*env)->GetArrayLength(env, buf);

    sprintf(debug, "array length: %d", cbuflen);
    LOGD(debug);
...
...
我的C代码如下所示:

                    short[] buf = new short[16];
                    Log.d("hello", "before!");
                    write(buf, 0, 16);
jint
Java_com_example_hellojni_HelloJni_write(JNIEnv* env, jshortArray buf, jint off, jint len)
{
    char debug[1024];
    int ii = 0;
    jsize cbuflen = (*env)->GetArrayLength(env, buf);

    sprintf(debug, "array length: %d", cbuflen);
    LOGD(debug);
...
...
输出为:

阵列长度:1079082088


为什么数组长度这么大?

能否显示整个JNI文件?您没有在JNI函数中声明目标对象。通常参数是JNIEnv*env、jobject javaObject等。这意味着您认为的jshortArray实际上是指向Java对象的指针,这可以解释您得到的奇怪结果。

这很奇怪,即使传递一个简单的整数也不起作用!这里发生了什么事!!!这真的是你的整个函数吗,还是缺少了什么?不妨说清楚:你的函数应该是这样的:
jint Java\u com\u example\u hellojni\u hellojni\u write(JNIEnv*env,jobject thisObj,jshortaray buf,jint off,jint len)