[英]Debug Assertion Failed - DirectShow Filter calling OpenCV Function - Release mode only
我正在编写一个DirectShow筛选器,以使用OpenCV HaarcascadeClassifier
检测对象。 它在“调试”模式下可以正常工作,但在“发布”模式下却不能,并且我不确定OpenCV函数(opencv_249 libs的VC 2010二进制文件)中是否存在内存泄漏,或者我的项目(设置)是否有问题。
我正在GraphStudio中加载过滤器,该工具可轻松构建DirectShow FilterGraph。 我不确定是否有关于在调试模式下编译过滤器DLL的假设。
经过一些预处理后,我基本上在做以下工作:
std::vector<cv::Rect> objects;
mClassifier.detectMultiScale(inputGray,objects, 1.3);
for(unsigned int i=0; i<objects.size(); ++i)
{
cv::rectangle(outputImage, objects[i], cv::Scalar(255,255,255));
}
因此,在功能块中,我正在预处理,然后是代码的所示部分,然后将数据写入DirectShow Buffer。
如果我使用的DLL在Release模式,我收到以下错误消息后 ,整体功能终止(所以大概别的地方FilterGraph动态的DirectShow里面):
Debug Assertion Failed!
Program: C:\Program Files (x86)\Graphstudio\graphstudio.exe
File: f:\dd\vctools\crt_bld\self_x86\crt\src\dbgdel.cpp
Line: 52
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
For information [...]
跟一个
Debug Assertion Failed!
Program: C:\Program Files (x86)\Graphstudio\graphstudio.exe
File: f:\dd\vctools\crt_bld\self_x86\crt\src\dbgdel.cpp
Line: 1322
Expression: _CrtlsValidHeapPointer(pUserData)
当我评论mClassifier.detectMultiScale(inputGray,objects, 1.3);
出来,过滤器不会崩溃。 尽管可能已经优化了一些东西,但我用一个循环替换了detectMultiScale
调用,该循环随机地(以前用time(NULL)种子)将cv::Rect
对象插入向量。 筛选器不会崩溃,并按照我假定的方式显示随机矩形。
我已经读到其他人已经观察到(valgrind) cv::CascadeClassifiert::detectMultiScale
产生内存泄漏。 而且我发现了一个链接,其中有人对detectSingleScale
遇到了问题,一些OpenCV提交者将其标记为已修复( http://code.opencv.org/issues/2628 )。
问题:
是否有这个确切的问题(请参阅上一链接)仍然在detectMultiScale
内?
问题是否可能不在我的项目中,而是在OpenCV库中?
为什么仅在发布模式下会出现此问题?
为什么只在DirectShow筛选器中出现此问题? (如果在独立项目中以发布模式运行“相同”代码/功能,则不会出现“ Debug Assert Failed
错误-尽管可能存在无法识别的内存损坏?!?)。
希望有人提前提出想法和建议!
编辑:
好的...我已经链接到msvcrtd.lib
...从我的项目中删除了整个lib(似乎我什至不需要它),现在它“可以工作了” ...剩下的问题是,是否存在某种内存泄漏。 还是与该lib链接是唯一的整体问题?
好的...我已经链接到msvcrtd.lib ...
从我的项目中删除了整个库(因此添加了默认库?!?),它现在“有效” ...
剩下的问题是,是否存在某种内存泄漏。 还是与该lib链接是唯一的整体问题?
愚蠢的我...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.