我目前正在使用 ndk 实现一个 android 功能。我在java中声明了这个函数
public static native void calculate(float[] rgb,float factor);
然后,我编写了 C 函数:
JNIEXPORT void JNICALL Java_<package>_calculate(
JNIEnv * env,
jobject object,
jfloatArray rgbObject,
jfloat factor){
jfloat* rgb = (*env)->GetFloatArrayElements(env,rgbObject,0);
if(rgb==NULL) return;
rgb[0]=5; // Test, crash!
(*env)->ReleaseFloatArrayElements(env,rgb,rgbObject,0);
}
但是,每次我尝试使用数组和一些值调用函数时,我都会收到 logcat 消息:
A/libc(16064):致命信号 11 (SIGSEGV) 位于 0x00000010 (code=1)
之后,应用程序崩溃。我发现它总是在写入浮点值时发生。阅读不会导致崩溃。
我有什么问题吗?不能写数组值吗?