我正在开发一款使用ndk在Android手机上运行的游戏,最近我遇到了一个崩溃的问题,我认为这与调用JNI函数SetByteArrayRegion
有关。我用以下代码简化了问题:
char content[18230925];
jbyteArray jdata;
jdata = lpJNIEnv->NewByteArray(18230925);
//lpJNIEnv is a JNIEnv pointer
lpJNIEnv->SetByteArrayRegion(jdata, 0, 18230925, (const jbyte*)content);
通过运行这些代码,我在调用
时遇到了Android设备上的随机崩溃lpJNIEnv->SetByteArrayRegion(jdata, 0, 18230925, (const jbyte*)content)
随机我的意思是一个非常大的机会,(在某些设备上甚至更大)。
我做了一些实验,发现它似乎与字节数组大小有关,如果我将缓冲区的大小缩小到类似182309
,那么它就不会崩溃。(和我的应用程序)长期以来一直使用较小的缓冲区大小,之前没有发生过任何问题......)
我已经完成了所有的检查并排除了我可以考虑的应用程序的所有可能缺陷(比如线程......),所以,这个JNI用法有什么不对吗?