Android OpenCV致命信号11,(编码错误做法?)

时间:2014-08-18 16:13:33

标签: android c++ opencv

关于OpenCV的可怕致命信号11真的没有那么多文件。有熟悉OpenCV的人能否提供一个彻底的解释原因呢?在某些情况下,似乎可能是由于'Android OpenCV绑定',但在我的情况下,我不确定这是否正确。

虽然重复调用Log,但我已经缩小了我经常遇到致命信号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)

如果有人可以发表评论,准确解释此错误消息的含义,那对我也有帮助。

1 个答案:

答案 0 :(得分:1)

信号11是段错误。这意味着操作系统没有为程序分配访问的内存。鉴于它发生的地址,看起来有人要么超过数组的边界,要么访问一个从未初始化的指针。如果没有碰撞痕迹,找出更多是不可能的。