2017-11-12 23 views
0

私は本当に奇妙な問題に遭遇しました。何が間違っているのかわかりません。すべてをコメントアウトしていますが、それでもクラッシュします。ここで SIGSEGV Android JNI空のメソッド

Javaのパート

package net.example.library.arrayprocessor; 


public class ArrayProcessor { 
    static { 
     System.loadLibrary("array-processor"); 
    } 

    public ArrayProcessor() { 

    } 

    public native short[] process(short[] readBuffer); 

} 

私のコードで、

buffer = arrayProcessor.process(buffer); 

JNIの一部 cmakeの

を次のように私はそれを呼び出しています

processor.cpp

#include <jni.h> 
#include <stdio.h> 

#define LOGI(...) \ 
    ((void)__android_log_print(ANDROID_LOG_INFO, "VoiceProcessor::", __VA_ARGS__)) 

extern "C" { 
JNIEXPORT jshortArray JNICALL 
Java_net_example_library_arrayprocessor_ArrayProcessor_processor(
     JNIEnv *env, jobject instance, jshortArray readBuffer_); 
} 

JNIEXPORT jshortArray JNICALL 
Java_net_example_library_arrayprocessor_ArrayProcessor_processor(
     JNIEnv *env, jobject instance, jshortArray readBuffer_) { 

    /* get size of the array */ 
    jsize len = env->GetArrayLength(readBuffer_); 

    /* get the body of array; it will be referecende by C pointer */ 
    jshort *body = env->GetShortArrayElements(readBuffer_, 0); 

    /* do some stuff */ 
    for (int i = 0; i < len; i++) { 
    printf("Short value: %hd\n", body[i]); 

    /* update value */ 
    body[i] = 0; 
    } 

    /* release body when you decide it is no longer needed 
    Pass changes back to Java */ 
    env->ReleaseShortArrayElements(readBuffer_, body, JNI_COMMIT); 
} 

しかし、私はそれを呼び出すようにしようとすると、それは私がメソッドの本体をコメントアウトしようとしてい

A/libc: Fatal signal 11 (SIGSEGV) at 0xc0c5a8f7 (code=1), thread 19335 (pool-3-thread-1) 

エラーがスローされますが、それでも同じエラー。

A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x6 in tid 3749 (pool-4-thread-1) 

私のコードに間違いがありますか?どのようにこのような問題を解決し、デバッグするのですか?

私はあなたが値を返すされていない任意の助け

答えて

2

に感謝することでしょう。 readBuffer_を返すことができますが、入力配列を変更するだけであれば、値を返す必要はありません。 voidと宣言できます。

Cコンパイラは、少なくともこのことについて警告する必要があります。警告を無視しないでください。 JNIコードはすばらしく清潔でなければなりません。

+0

AWESOME !!できます !!! – bxfvgekd

+0

'-Werror = return-type'は、あなたのためにこの問題を捉えたはずのcflagです。 –

関連する問題