开发者

getArrayLength() is returning a huge number...

I am trying to understand jni, so I started hacking up hellojni, and I ran into this problem.

My j开发者_开发技巧ava code looks like this:

                    short[] buf = new short[16];
                    Log.d("hello", "before!");
                    write(buf, 0, 16);

and my C code looks like this:

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);
...
...

The output is:

array length: 1079082088

Why is the array length so big?


Could you show your entire JNI file? You are not declaring the target object in your JNI function. Usually the arguments are JNIEnv* env, jobject javaObject, etc. This means that what you believe is the jshortArray is actually the pointer to a Java object, which would explain the weird results you are getting.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜