2013-01-05 53 views
1

我正试图做一个程序,通过网络摄像头饲料创建各种过滤器,并遇到一些与BLOB分析和其他一些问题。C++ segFault问题

我每次激活我的grassfire功能时都会收到segFault。 下面是我的地表火函数的代码:

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。

我也在另一个过滤器上获得了segFault,这不应该是内存使用要求。 我在Win 7

回答

2

它看起来并不像你可以读/写粘贴blobArray年底,因为你做一些检查,这样就意味着你的stack overflow受害者。

你应该使用一个调试器并运行一个backtrace,许多调用不能隐藏。

0

用在了openFrameworks代码块。如果你有大量的0,你可能会得到一个堆栈溢出数组值由于功能的大量递归性质。我会建议尝试iterative flood fill algorithm,而不是看看是否解决了这个问题。

0

我会用valgrind来检测应用程序。 Valgrind将显示分段故障发生位置的堆栈轨迹。