TSG*_*mes 5 java arrays android android-ndk
我目前正在用ndk实现一个android函数.我在java中声明了这个函数
public static native void calculate(float[] rgb,float factor);
Run Code Online (Sandbox Code Playgroud)
然后,我写了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);
}
Run Code Online (Sandbox Code Playgroud)
但是,每当我尝试使用数组和某个值调用该函数时,我都会收到logcat消息:
A/libc(16064):致命信号11(SIGSEGV)位于0x00000010(代码= 1)
之后,应用程序崩溃了.我发现在写入浮点值时总会出现这种情况.阅读不会导致崩溃.
我有什么不对吗?是不是可以写出数组值?
我找到了解决方案!由于某种原因,该函数被以数组形式的空值调用。但是, rgb==NULL 检查没有被触发(我不知道出于什么原因)。我通过在获取值之前添加第二次检查解决了这个问题
JNIEXPORT void JNICALL Java_<package>_calculate(
JNIEnv * env,
jobject object,
jfloatArray rgbObject,
jfloat factor){
if(rgbObject==NULL) return; // Check if incomming array is NULL-Pointer
jfloat* rgb = (*env)->GetFloatArrayElements(env,rgbObject,0);
if(rgb==NULL) return;
rgb[0]=5; // Test, crash!
(*env)->ReleaseFloatArrayElements(env,rgb,rgbObject,0);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9312 次 |
最近记录: |