【问题标题】:Debug Assertion Failed - DirectShow Filter calling OpenCV Function - Release mode only调试断言失败 - DirectShow 过滤器调用 OpenCV 函数 - 仅发布模式
【发布时间】:2014-09-18 12:57:02
【问题描述】:

我正在编写一个 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 过滤器图内的其他地方):

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 库中?

为什么这个问题只出现在Release模式下?

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

希望有人有想法并提前谢谢!

编辑:

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

【问题讨论】:

    标签: c++ opencv memory-leaks directshow


    【解决方案1】:

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

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

    还有一个问题,是否存在某种内存泄漏。 还是链接到那个库是唯一的问题?

    愚蠢的我......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多