В чем причина этого A/libc: invalid address or address of corrupt block 0x5da90aa0 passed to dlfree
и A/libc: Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1), thread 19239 (IntentService[K)
intermitent crash?Ошибка с кодом
Код C++ вызывает сбой. Никакие исключения не улавливаются с Java-land. Крушение наблюдается с перерывами на Android 4.4.4. Я не наблюдал его на Android 6.0.
код родной точки входа/выхода:
JNIEXPORT jstring
JNICALL Java_com_company_product_ClassJNI_foo(JNIEnv* env, jobject obj, jstring options)
{
const jsize optionLength = env->GetStringUTFLength(options);
std::vector <char> optionsBuffer(static_cast<int>(optionLength));
env->GetStringUTFRegion(options, 0, optionLength, optionsBuffer.data());
const std::string nativeOptions(optionsBuffer.cbegin(), optionsBuffer.cend());
try
{
SerialWrapper si(env, obj);
const std::string result = Procedure::exec(nativeOptions, si);
// gets this far
return env->NewStringUTF(result.c_str());
}
catch (const JObjectError& e)
{
const JSON jsonError{{PROP_ERROR, std::string(e.what())}};
return env->NewStringUTF(jsonError.dump().c_str());
}
}
Я прочитал, казалось бы, связанные сообщения обсуждают несколько потоков доступа к ресурсу, и я не верю, что будет вопрос здесь.
Ваш обратный звонок действительно в 'catch' блок? Что возвращает ваша функция, если нет исключения? Это, скорее всего, вызовет крах. –