我想在子线程中使用这三个函数,但是程序崩溃了。
这是树C ++函数:
woff2
这三个函数可以在android程序中正确使用,但是当我构建一个子线程并使用这三个函数时,程序崩溃了。
通过测试,似乎该行崩溃了,结果无法返回。
//here are three JNI interface
public native byte[] readImage(String str);
public native byte[] FPGAEnhancement(String str, int flag);
public native byte[] FPGASobel(String str, int flag);
这是readImage函数:
env->SetByteArrayRegion(jarrRV, 0, length, data);
我想我在子线程中调用C ++函数的方式可能有些问题,但是我不知道它到底是什么。谢谢!!
答案 0 :(得分:1)
当图像文件很大时,在堆栈上分配 data [length] 可能会耗尽堆栈,并导致崩溃。实际上,您实际上根本不需要此数组,可以安全地直接访问新创建的 jarrRV 的字节:
jbyteArray jarrRV = env->NewByteArray(length);
jboolean isCopy;
jbyte data = env->GetByteArrayElements(env, jarrRV, &isCopy);
readImage(fp, data, length);
fclose(fp);
env->ReleaseByteArrayElements(jarrRV, data, 0);
关于您的C ++代码的其他注释: