我有一个java方法 java.lang.String
争论。当我从c打电话的时候,我总是收到信号 NewStringUTF
.
如何使用调用java方法 char *
字符串?
// Java
void doSomething(String str) { … }
// C
void Java_some_very_long_function_name(JNIEnv *env, jobject thi)
{
jclass clas = (*env)->GetObjectClass(env, thi);
jmethodID method = (*env)->GetMethodID(env, clas, "doSomething", "(Ljava/lang/String;)V");
jstring str = (*env)->NewStringUTF(env, strdup("My String")); // Segfaults here
// TODO Call the method
}
它发生在 NewStringUTF
执行,而不是在 NewStringUTF
打电话。
art::FaultManager::HandleFault(int, siginfo*, void*) 0x00000000eae9efa4
art::art_fault_handler(int, siginfo*, void*) (.llvm.2308358812779254744) 0x00000000eae9eccb
___lldb_unnamed_symbol25$$app_process32 0x000000005c58cfe1
___lldb_unnamed_symbol2$$libc.so 0x00000000edd18180
art::Thread::DecodeJObject(_jobject*) const 0x00000000eb244c3f
<unknown> 0x00000000ec29f05d
<unknown> 0x000000005c58b000
Java_very_long_name foo.c:761
[…]
1条答案
按热度按时间wj8zmpe11#
看起来故障是由调试器引起的。当我没有在本机方法中停止执行(使用断点)时,它运行起来没有任何问题。