Debug Assertion Failed - 调用OpenCV函数的DirectShow Filter - 仅限发布模式

时间:2014-09-18 12:57:03

标签: c++ opencv memory-leaks directshow

我正在编写一个DirectShow过滤器,用于检测具有OpenCV HaarcascadeClassifier的对象。它在调试模式下工作正常,但在发布模式下没有工作,我不确定OpenCV函数(opencv_249库的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缓冲区。

如果我在发布模式下使用DLL,我会收到以下错误消息 AFTER 整个函数终止(所以可能在DirectShow Filtergraph中的其他地方):

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);时,过滤器不会崩溃。虽然有些事情可能会被优化掉,但我用一个随机(以前用时间(NULL)播种)的循环替换了detectMultiScale调用,将cv::Rect个对象插入到向量中。过滤器不会崩溃,并以我假设的方式显示随机矩形。

我读过其他人观察到(valgrind)cv::CascadeClassifiert::detectMultiScale产生内存泄漏。我找到了一个链接,其中有人遇到detectSingleScale的问题,而某些OpenCV提交者将其标记为已修复(http://code.opencv.org/issues/2628)。

问题:

这个确切的问题(参见上一个链接)是否({仍然)在detectMultiScale内?

问题是否可能不在我的项目中,而是在OpenCV库中?

为什么此问题仅在发布模式下发生?

为什么此问题仅发生在DirectShow过滤器中? (如果我在独立项目中以发布模式运行&#34;相同&#34;代码/功能,我不会发现Debug Assert Failed错误 - 尽管可能存在无法识别的内存损坏?! ?)。

我希望有人有一个想法,而且提前做好了!

修改

好吧......我已经联系了msvcrtd.lib ...从我的项目中删除了整个lib(似乎我甚至不需要它)并且它已经工作了#34;现在......还有一个问题,是否存在某种内存泄漏。或者是针对该lib连接唯一的整个问题?

1 个答案:

答案 0 :(得分:0)

好的......我已经链接了msvcrtd.lib ...

从我的项目中删除了整个lib(因此添加了默认的库?!?)并且&#34;工作&#34;现在......

还有一个问题,是否存在某种内存泄漏问题。 或者是针对该lib连接唯一的整个问题?

愚蠢的我......