我正在编写一个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连接唯一的整个问题?
答案 0 :(得分:0)
好的......我已经链接了msvcrtd.lib ...
从我的项目中删除了整个lib(因此添加了默认的库?!?)并且&#34;工作&#34;现在......
还有一个问题,是否存在某种内存泄漏问题。 或者是针对该lib连接唯一的整个问题?
愚蠢的我......