Android OpenCV Fatal Signal 11,(糟糕的编码实践?)

Android OpenCV Fatal Signal 11,(bad coding practices?)

本文关键字:编码 Fatal OpenCV Signal Android      更新时间:2023-10-16

关于OpenCV可怕的致命信号11的文档确实没有那么多。熟悉OpenCV的人能提供一个彻底的解释吗?在某些情况下,这似乎可能是由于"Android OpenCV绑定",但在我看来,我不确定这一定是真的。

通过反复调用日志,我已经缩小了我经常遇到致命信号11的确切点。它出现在一个巨大的for循环之前,如下所示。我假设这是一个内存问题,因为程序运行这个函数大约5-30秒,然后崩溃这个错误。我是一名自学成才的程序员,所以一般来说,如果某些东西有效,我会坚持下去,但这让我很难知道我的代码是有效的还是低效的。在这种特殊情况下,它似乎导致了c++代码中的错误,我不知道如何调试。

    int cols = myimage.cols; int rows = myimage.rows;
    for (int y = 0; y < cols; y++){
    for (int x = 0; x < rows; x++){
        //val1 = g4.at<float>(y, x);
        //val2 = g5.at<float>(y, x);
        if (g4.at<float>(y, x) >= minrad && g5.at<float>(y, x) >= minrad){
            if (g4.at<float>(y, x) <= maxrad && g5.at<float>(y, x) <= maxrad){
                if (((x + g4.at<float>(y, x)) <= rows) && (y + g5.at<float>(y, x) <= cols)){
                    mapped.at<float>(y + g5.at<float>(y, x) , y + g4.at<float>(y, x)) =              mapped.at<float>(y + g5.at<float>(y, x), y + g4.at<float>(y, x)) + 1;
                    }
            }
        }
    }
}

完整的错误消息显示在Eclipse中——是否有一种方法可以让我获得有关此错误的更多信息?几天前我尝试了adb logcat,但我不确定它给我的信息是否有用):

Fatal signal 11 (SIGSEGV) at 0x62bacfb4 (code=1), thread 24457 (Thread-475)

如果有人能留下评论解释这个错误信息的确切含义,那对我也有帮助。

11号信号是段故障。这意味着某些东西访问的内存不是由操作系统分配给程序的。考虑到它发生的地址,看起来像是有人越过了数组的边界,或者访问了一个从未初始化的指针。如果没有崩溃跟踪,就不可能找出更多。