如何在tid xxxxx(Thread-X)中解决Android致命信号11(SIGSEGV),代码1,故障地址0x0?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在tid xxxxx(Thread-X)中解决Android致命信号11(SIGSEGV),代码1,故障地址0x0?相关的知识,希望对你有一定的参考价值。

我正在使用android的Opencv sdk来开发实时处理和匹配。

主要的Opencv特征逻辑在JNI函数中。

问题是有时(有时候)我的应用程序崩溃没有错误,所以我忽略了问题,直到我完成了算法的开发。

我开始调查错误,它肯定在JNI部分。

这是我在Log中得到的错误

A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 27424 (Thread-8)
A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0

我在互联网上搜索了很多,我发现了这个解决方案

<activity
   android:hardwareAccelerated="false" />

它工作了2天,现在我得到了同样的错误。

有什么问题,我该如何解决?

任何帮助将不胜感激,并提前感谢您。

编辑

我应该补充一点,我的应用程序从库中获取参考图像,并使用Opencv与实时图像源进行比较。

如果我从图库中选择一个图像并且应用程序崩溃,那么该图像将无法再次运行,如果我拍摄新图像或之前有效的图像,该应用程序工作正常。

答案

经过一番讨论后,很明显问题出在与内存的交互上:

extern "C" 
jdouble 
JNICALL Java_com_foo(JNIEnv *env, jclass type, jlong addrRgba, jlong addrGray) { 
  Mat &mRgb = *(Mat *) addrRgba;
  Mat &mGray = *(Mat *) addrGray;

  return (jdouble) toGray(mRgb, mGray);
}

作为快速修复double toGray(Mat& rgb, Mat& gray);不得不改为double toGray(Mat rgb, Mat gray)

其他信息可以在CvMat deep copy主题上找到

以上是关于如何在tid xxxxx(Thread-X)中解决Android致命信号11(SIGSEGV),代码1,故障地址0x0?的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中修改pandas中的排名

使用Ant编译源代码时,出错:xxxxx.java is not a directory。谁遇到过,知道怎么解决吗?

本地化测试,用 XXXXX 格式化所有字符串

使用MSSQL同步&发布数据库快照遇到错误:对路径“xxxxx”访问被拒绝的解决方法

如何在 Cocoa Pods 中启用“CorePlot”命令?

No bean named 'xxxxx' is defined,已解决,这个坑很难发现,你get了吗