关于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)
如果有人可以发表评论,准确解释此错误消息的含义,那对我也有帮助。
答案 0 :(得分:1)
信号11是段错误。这意味着操作系统没有为程序分配访问的内存。鉴于它发生的地址,看起来有人要么超过数组的边界,要么访问一个从未初始化的指针。如果没有碰撞痕迹,找出更多是不可能的。