cvHaarDetectObjects():“变量‘seq_thread’周围的堆栈已损坏。”
Posted
技术标签:
【中文标题】cvHaarDetectObjects():“变量‘seq_thread’周围的堆栈已损坏。”【英文标题】:cvHaarDetectObjects(): "Stack aound the variable 'seq_thread' was corrupted." 【发布时间】:2010-03-29 10:04:15 【问题描述】:一段时间以来,我一直在寻找自己的 Haar Cascaded 人脸检测实现,并开始着手研究 OpenCV 2.0 实现。
开箱即用,在调试模式下运行,Visual Studio 在cvhaar.cpp:1518
上中断,通知我:
运行时检查失败 #2 - 变量
seq_thread
周围的堆栈已损坏。
OpenCV 附带一个简单的数组越界问题对我来说似乎很奇怪。运行发布没有任何问题,但我怀疑它只是没有执行检查并且数组超出了界限。
为什么我会收到此错误消息?它是 OpenCV 中的错误吗?
【问题讨论】:
您能否更清楚地说明您的问题是什么? :-) 是的,对不起;经过审查,确实没有任何问题。我还添加了问题的可能来源。 我在 VS2008 中调试 OpenCV 的运气并不好。我通常会求助于构建安装包并以这种方式测试我的应用程序,或者至少制作一个 .exe 并将其放入包含必要 OpenCV .dll 文件的文件夹中。 【参考方案1】:我相信,稍微调试一下就发现了罪魁祸首。我“修复”了它,但这一切对我来说仍然很奇怪。
在cvhaar.cpp:868
上创建一个大小为CV_MAX_THREADS
的数组:
CvSeq* seq_thread[CV_MAX_THREADS] = 0;
在第 918 行,它继续指定max_threads
:
max_threads = cvGetNumThreads();
在不同的地方,seq_thread
使用以下 for
语句循环:
for( i = 0; i < max_threads; i++ )
CvSeq* s = seq_thread[i];
// ...
但是,cxmisc.h:108
声明 CV_MAX_THREADS
:
#define CV_MAX_THREADS 1
因此,seq_thread
的声明决不能超过大小 1,而 cvGetNumThreads()
返回 2(我假设这反映了我机器中的内核数)。
我通过添加以下简单的小语句解决了这个问题:
if (max_threads > CV_MAX_THREADS) max_threads = CV_MAX_THREADS;
这些有意义吗?
【讨论】:
以上是关于cvHaarDetectObjects():“变量‘seq_thread’周围的堆栈已损坏。”的主要内容,如果未能解决你的问题,请参考以下文章