Я написал обертку Java/JNI вокруг драйвера камеры, которую я сейчас использую в качестве модульного теста. Там странная проблема: первый раз, когда я запустить его после включения питания или велосипедной камеры, она всегда имеет следующую ошибку:Поврежденная ошибка с двойной связью при запуске программы в первый раз, последующие прогоны в порядке
*** Error in `java': corrupted double-linked list: 0x00007f70014bf4c0 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x77725)[0x7f70084de725]
/lib/x86_64-linux-gnu/libc.so.6(+0x7daa4)[0x7f70084e4aa4]
/lib/x86_64-linux-gnu/libc.so.6(+0x82175)[0x7f70084e9175]
/lib/x86_64-linux-gnu/libc.so.6(__libc_malloc+0x54)[0x7f70084ea5a4]
/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libjvm.so(+0x91bbd5) [0x7f7007d92bd5]
/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libjvm.so(+0x6deab8)[0x7f7007b55ab8]
/home/ceres/git/CameraTest/build/libPleoraWrapper.so(_ZN7JNIEnv_20GetByteArrayElementsEP11_jbyteArrayPh+0x33) [0x7f6feddfc4e7]
/home/ceres/git/CameraTest/build/libPleoraWrapper.so(Java_net_ceresimaging_camera_pleora_PleoraCamera_nativeCopyRawImage+0x53)[0x7f6feddfbcf4]
[0x7f6ff1017494]
В следующий раз, и все последующие раз он работает нормально. Это мой код на C++:
JNIEXPORT jint JNICALL Java_net_---------_camera_pleora_PleoraCamera_nativeCopyRawImage
(JNIEnv * env, jobject obj, jbyteArray arr) {
int copyLen = 0;
if (imageSizeBytes>0){
jbyte* bufferPtr = env->GetByteArrayElements(arr, NULL);//<-- the error seems to be happening here
jsize len = env->GetArrayLength(arr);
copyLen = std::min(len,imageSizeBytes);
std::memcpy(bufferPtr, imageBuffer, copyLen);
env->ReleaseByteArrayElements(arr,bufferPtr,0);
}
return copyLen;
}
Я уверен, что передаю действительный массив. Что может быть неправильным и как лучше всего отладить это?
Я не совсем уверен, но ответы на [этот вопрос] (https://stackoverflow.com/questions/14897157/what-does-corrupted-double-linked-list-mean) помогают? Возможно, вы можете использовать его для уточнения вопроса. –
Спасибо, я уже видел этот вопрос, ответы, похоже, не помогают. – infrared