C++ 调试断言失败-DirectShow筛选器调用OpenCV函数-仅限发布模式

C++ 调试断言失败-DirectShow筛选器调用OpenCV函数-仅限发布模式,c++,opencv,memory-leaks,directshow,C++,Opencv,Memory Leaks,Directshow,我正在编写一个DirectShow过滤器,它使用OpenCVHaarcascadeClassifier检测对象。它在调试模式下工作正常,但在发布模式下工作不正常,我不确定OpenCV函数(OpenCV_249 libs的VC 2010二进制文件)中是否存在内存泄漏,或者我的项目(设置)是否有问题 我正在GraphStudio中加载过滤器,这是一个轻松构建DirectShow FilterGraph的工具。我不确定是否有关于过滤器DLL在调试模式下编译的假设 经过一些预处理后,我基本上做了以下工作

我正在编写一个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));
}
接着是

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)
当我注释时
mclassizer.detectMultiScale(inputGray,objects,1.3)输出,过滤器不会崩溃。虽然有些东西可能会被优化掉,但我用一个循环替换了
detectMultiScale
调用,该循环随机(以前使用时间(NULL)作为种子)将
cv::Rect
对象插入向量中。过滤器不会崩溃,并以我假设的方式显示随机矩形

我已经读到其他人观察到(valgrind)
cv::CascadeClassifierRT::detectMultiScale
产生内存泄漏。我发现了一个链接,其中有人对
detectSingleScale
有问题,一些OpenCV提交者将其标记为已修复()

问题:

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

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

为什么这个问题只在发布模式下发生

为什么这个问题只发生在DirectShow筛选器中?(如果在独立项目中以发布模式运行“相同”的代码/功能,则不会出现
Debug Assert Failed
错误-尽管可能存在无法识别的内存损坏?!?)

我希望有人有一个想法和thx提前

编辑:


好的。。。我链接了
msvcrdt.lib
。。。从我的项目中删除了整个库(似乎我甚至不需要它),现在它“工作”了。。。还有一个问题,是否存在某种内存泄漏。还是说链接到该库是唯一的问题?

好的。。。我已链接到msvctd.lib

从我的项目中删除了整个库(所以添加了默认库?!?),现在它“工作”了

还有一个问题,是否存在某种内存泄漏。 还是说与自由党的联系是唯一的问题

愚蠢的我

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)