笨qiao先飞 2019-06-18 14:37 采纳率: 0%
浏览 280

Android 使用so库出现

Android 出现

invalid address or address of corrupt block 0xb9137b98 passed to dlfree
    Fatal signal 11 (SIGSEGV), code 1, fault addr 0xdeadbaad in tid 18166 (FinalizerDaemon)
        android传递给dlf的损坏块0xb8ff8e38的地址或地址无效

有哪位大佬出现过啊 是调用so出现了问题呢 还是线程出的问题求大佬帮忙啊

这是我的代码

private class ReadThread extends Thread {

        private byte[] outBuf;
        private String substring;

        @Override
        public void run() {
            super.run();
            long time1 = System.currentTimeMillis();
            byte[] buf = new byte[512];
            int length = 0;
            //判断进程是否在运行,更安全的结束进程
            while (!threadStatus) {
                Log.d(TAG, "进入线程run");
                //64   1024
                byte[] buffer = new byte[64];
                int size; //读取数据的大小
                try {
                    size = inputStream.read(buffer);
                    if (size > 0) {
                        long time2 = System.currentTimeMillis();
                        if (time2 - time1 < 3) {
                            continue;
                        }
                        System.arraycopy(buffer, 0, buf, length, size);
                        length += size;
                        if (length > 256) {
                            buf = new byte[512];
                            length = 0;
                        } else if ((length > 3) && (buf[length - 1] == 0x0d)) {
                            outBuf = new byte[length - 1];
                            System.arraycopy(buf, 0, outBuf, 0, length - 1);
                            substring = new String(outBuf);
                            onDataReceiveListener.onDataReceive(outBuf, size);
                            break;
                        } else {
                            Thread.sleep(10);
                        }
                        Log.e("tag", "run: 接收到了数据大小:" + String.valueOf(size));
                    }
                } catch (IOException e) {
                    Log.e("tag", "run: 数据读取异常:" + e.toString());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-10 10:25
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这段错误信息表明,当尝试将一个已分配但未释放的内存区域(即“损坏的块”)传递给dlfree函数时,Android系统抛出了一个FatalSignal信号。这个信号通常意味着程序中存在一些不可修复的内存泄漏或者死锁情况。

    要解决这个问题,您可能需要检查以下几点:

    1. 确保所有引用都正确解除:首先确认您的代码中没有引用到被传入dlfree的内存区域,并且已经成功地解除了这些引用。
    2. 分析并修复潜在的死锁或资源竞争问题:确保在使用共享资源(如线程、文件等)时,不会引发死锁或者其他类型的资源竞争。
    3. 考虑使用Java或C++的垃圾回收机制:如果您的应用程序主要依赖于垃圾回收机制来管理内存,那么确保其能够有效地处理内存泄露是非常重要的。
    4. 调试和测试:使用调试工具(如LogCat、VNC等)来跟踪Android系统的内存使用情况,以帮助发现可能导致内存泄漏的原因。

    由于您提供的代码片段非常短,我无法直接提供解决方案。但是,以上提到的一般原则应该可以帮助您找到问题所在。如果您能提供更多关于您的代码的具体细节,我可以为您提供更具体的建议。

    评论

报告相同问题?