我正在尝试编写一个程序,该程序通过网络摄像头源创建各种过滤器,但遇到了 BLOB 分析和其他一些问题。
每次激活 grassfire 功能时,我都会收到 segFault。 这是我的 grassfire 函数的代码:
void testApp::grassFire(int mask_Y, int mask_X, unsigned char labelCnt)
{
blobArray[mask_Y * camWidth + mask_X] = labelCnt;
if (mask_X + 1 <= camWidth - 1 && blobArray[mask_Y * camWidth + mask_X + 1] == 0)
grassFire(mask_Y, mask_X + 1, labelCnt);
if (mask_Y + 1 <= camHeight - 1 && blobArray[(mask_Y + 1) * camWidth + mask_X] == 0)
grassFire(mask_Y + 1, mask_X, labelCnt);
if (mask_X - 1 >= 0 && blobArray[mask_Y * camWidth + mask_X - 1] == 0)
grassFire(mask_Y, mask_X - 1, labelCnt);
if (mask_Y - 1 >= 0 && blobArray[(mask_Y - 1) * camWidth + mask_X] == 0)
grassFire(mask_Y - 1, mask_X, labelCnt);
}
它的调用方式是通过一个运行每一帧的开关盒 这意味着它会在每一帧更新时被调用
函数本身在任何其他范围之外声明。
我知道它是一个非常重的过滤器,它可能会使用大量内存,但与其他一些过滤器相比,它还不错,所以我不明白为什么会出现段错误。
我还在另一个过滤器上遇到了 segFault,这对内存使用要求不高。 我在 win 7 的代码块中使用 openframeworks。
最佳答案
由于您进行了一些检查,因此您似乎无法读取/写入粘贴 blobArray
的末尾,所以这意味着您是 stack overflow 的受害者.
您应该使用调试器并运行回溯,许多调用无法隐藏。
关于C++ 段错误问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14176638/