Android JNI에서 Java 배열을 할당하는 함수를 작성했습니다. 그러나이 함수가 Java에서 계속 호출되면 [* Fatal signal 11 (SIGSEGV)] 오류가 발생합니다.JNI에서 할당 한 배열에 대해서
C++
byte[] buf = conv.updateBuffer(buflen);
static jbyteArray buffer = NULL;
static int cbuflen = 0;
jbyteArray Java_com_sample_buffer_Buffer_updateBuffer(JNIEnv* env, jobject thiz, jlong handle, jint buflen)
{
if(buflen > cbuflen){
if(buffer != NULL) env->DeleteLocalRef(buffer);
buffer = env->NewByteArray(buflen);
cbuflen = buflen;
}
return buffer;
}
자바 나는이 방법을 사용하지할까요? 아니면 몇 가지 조치가 있습니까?
무엇을 "계속해서 불렀다"는 뜻인가요? 여러 스레드에서 호출하고 있습니까? –
왜? 왜 이것을 JNI에 쓰는거야? Java에서 더 효율적입니다. Java에서 이미이 작업을 수행하는 클래스가 있습니다 (예 : ByteArrayOutputStream. – EJP