繁体   English   中英

第一次运行程序时出现双链表错误,后续运行正常

[英]Corrupted double-linked list error when running program for the 1st time, subsequent runs are ok

我在相机驱动程序周围写了一个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;

}

我很确定我正在传递一个有效的数组。 可能出现什么问题以及调试此问题的最佳方法是什么?

我尝试了一种不同的返回数据的方法:不是通过作为参数传递的数组,如本问题中所述,而是每次在C ++函数中分配一个新数组,只是为了查看首次运行崩溃是否仍然发生。 它做了。 虽然我会得到一个分段错误而不是一个损坏的双链表。 我玩了分配数组的大小。 在第一次打开相机后,我能够分配一个1000字节的数组,但不能分配一个2000字节的数组(两者都太小)。

我终于能够在每次启动时打开,关闭和重新打开摄像头,然后尝试分配新的jbyte数组(替代方法)或获得写入权限(这个问题),这可能仍然涉及分配据我所知,JNI文档中有一个新阵列。 也许这是一个JVM或相机驱动程序错误,但我可以解决它。

我想知道是否有办法通过检查C ++代码可用的内存量来防止这样的崩溃。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM