Что могло вызвать SIGSEGV при вызове NewObjectArray для JNI в Android?

Я только что начал работать с NDK Android, но я продолжаю получать SIGSEGV, когда у меня есть этот вызов в моем коде C:

jobjectArray someStringArray;
someStringArray = (*env)->NewObjectArray(env, 10, 
(*env)->FindClass(env,"java/lang/String"),(*env)->NewStringUTF(env, ""));

Основа на всем примере, который я могу найти, вышеупомянутый код, корректна, но я продолжаю получать SIGSERGV, и все в порядке, если строка NewObjectArray комментируется. Какая-либо идея, что могло вызвать такую проблему?

6
задан Ken 21 January 2010 в 22:13
поделиться

1 ответ

выглядит правильно, так что я предполагаю, что вы сделали что-то еще не так. я предполагаю, что вы работаете с checkjni? вы можете захотеть разбить это на несколько строк: сделать FindClass и проверить возвращаемое значение, сделать NewStringUTF и проверить возвращаемое значение, а затем позвонить в NewObjectArray.

btw, вы можете захотеть передать NULL в качестве последнего аргумента; этот паттерн использования пустой строки в качестве значения по умолчанию для каждого элемента массива обычно используется (я думаю, что это copy & pasted из некоторой документации Sun и распространился оттуда), но это редко бывает полезно, и это немного расточительно. (и это не соответствует поведению "new String[10]" на Java.)

.
5
ответ дан 17 December 2019 в 00:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: