getArrayLength () возвращает огромное количество ... - PullRequest
2 голосов
/ 30 июля 2011

Я пытаюсь понять jni, поэтому я начал взламывать hellojni и столкнулся с этой проблемой.

Мой код Java выглядит следующим образом:

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

и мой код C выглядит так:

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

Почему длина массива такая большая?

1 Ответ

4 голосов
/ 30 июля 2011

Не могли бы вы показать весь файл JNI?Вы не объявляете целевой объект в своей функции JNI.Обычно аргументами являются JNIEnv * env, jobject javaObject и т. Д. Это означает, что то, что вы считаете jshortArray, на самом деле является указателем на объект Java, что объясняет странные результаты, которые вы получаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...