Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android OpenCV致命信号11,(糟糕的编码实践?)_Android_C++_Opencv - Fatal编程技术网

Android OpenCV致命信号11,(糟糕的编码实践?)

Android OpenCV致命信号11,(糟糕的编码实践?),android,c++,opencv,Android,C++,Opencv,关于OpenCV可怕的致命信号11,确实没有那么多文档。熟悉OpenCV的人能否提供一个彻底的解释是什么导致了它?在某些情况下,这似乎是由于“Android OpenCV绑定”,但在我的情况下,我不确定这是否一定是真的 虽然重复调用日志,但我已经缩小了经常遇到致命信号11的确切位置。它出现在一个巨大的for循环之前,如下所示。我假设这是一个内存问题,因为程序运行这个函数大约5-30秒,然后出现这个错误。我是一个自学成才的编码员,所以一般来说,如果某个东西有效,我会坚持使用它,但这让我很难知道我的

关于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;
                    }
            }
        }
    }
}

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

信号11是一个segfault。这意味着被访问的内存没有被操作系统分配给程序。给定它发生的地址,看起来有人越过了数组的边界,或者访问了从未初始化过的指针。如果没有崩溃跟踪,就不可能计算出更多的数据。

y应该超过行,x应该超过列;)(同时也要更改边界检查代码)你是想修复我的代码,因为你刚刚这么做了吗
Fatal signal 11 (SIGSEGV) at 0x62bacfb4 (code=1), thread 24457 (Thread-475)