图像处理- c++ segFault问题
image processing - c++ segFault issue
我试图做一个程序,通过网络摄像头feed创建各种过滤器,并遇到了blob分析和其他一些问题。
我得到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);
}
它的调用方式是通过每一帧运行的switch case 这意味着它在每一帧更新
时被调用函数本身声明在任何其他作用域之外。
我知道这是一个非常重的过滤器,它可能会使用大量的内存,但与其他一些过滤器相比,它并没有那么糟糕,所以我不知道为什么我得到了segFault。
我还在另一个过滤器上得到segFault,这应该不是内存使用要求。我在win7的代码块中使用开放框架。
它看起来不像你可以读/写粘贴你的blobArray
的末尾,因为你做了一些检查,所以这意味着你是一个堆栈溢出的受害者。
您应该使用调试器并运行反向跟踪,因为许多调用无法隐藏
如果您有很多数组值为0,那么由于函数的严重递归性质,您可能会得到堆栈溢出。我建议尝试迭代洪水填充算法,看看是否能解决问题。
我将使用valgrind测试应用程序。Valgrind将显示分段错误发生的堆栈跟踪。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- C++中带有List类的迭代器Segfault
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 调试Boost序列化segfault问题
- 图像处理- c++ segFault问题