尝试访问本机方法时,致命信号11(SIGSEGV)位于0x00000020(代码= 1)

时间:2014-01-07 14:17:39

标签: java android c++ java-native-interface

我在Android上使用JNI来使用框架。要访问它的代码,我需要通过JNI访问C ++代码,但我得到了上面的例外。我理解错误和内存访问,但我不确切知道它为什么会发生。我很擅长使用这些技术,在寻找答案之后,没有人帮助过我。

我的.h文件:

extern "C"{
JNIEXPORT void JNICALL Java_com_eegeo_MainActivity_AddNewSphere(JNIEnv* jenv, jobject obj, jlong nativeAppWindowPtr, jdouble y);}

我的.cpp文件,在命名空间之后:

JNIEXPORT void JNICALL Java_com_eegeo_MainActivity_AddNewSphere(JNIEnv* jenv, jobject obj, jlong nativeAppWindowPtr, jdouble y){

    Examples::DrawSphereExample* example = (Examples::DrawSphereExample*)(nativeAppWindowPtr);
    Eegeo::Space::LatLongAltitude* example2 = (Eegeo::Space::LatLongAltitude*)(nativeAppWindowPtr);

    example2->SetAltitude(y);
    example->AddSphere((example->getLocation()), Eegeo::v3(1.0f, 1.0f, 0.0f));}

我的活动,它调用该方法:

public static native void AddNewSphere(double Yposition);

@Override
public void onClick(View v) {
if(v.getId() == R.id.add_pin){
    AddNewSphere(id);
}
}

调试代码我注意到这是“example-> AddSphere((example-> getLocation()),Eegeo :: v3(1.0f,1.0f,0.0f));”它无法执行的行,给我这个例外。我不知道是不是因为引用或其他事情。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我发现我试图在动作上做一个动作,但我正在使用的框架不允许它,这就是我得到这个例外的原因。我已经改变了我的实现,我不会再出现这个错误了。