您正在以调试模式构建应用程序,并针对多线程调试DLL CRT进行链接。您知道OpenCV DLL链接到哪个CRT吗?如果链接到静态CRT,它将使用从单独的堆分配的数据填充矢量,这会在您使用的Debug CRT中引起断言。
如果以发布模式构建应用程序,则应该不再看到该断言,但最终可能会导致内存泄漏。最好的办法是确保您的应用程序和OpenCV DLL都链接到同一多线程DLL CRT。
编辑:如果您无法重建OpenCV以使用与您的应用程序相同的CRT,则可以尝试通过修改应用程序清单来告诉链接程序为您的应用程序使用与OpenCV相同的CRT版本。请参阅如何强制C ++编译器使用特定的CRT版本?有关如何执行此操作的更多信息。
0
我正在尝试从OpenCV 2.4.2开始轮廓检测。为此,我为OpenCV建立了一个项目,并复制了文档中的整个示例代码。供以后参考,下面是代码:
在Visual Studio 11 RC(Windows 7 SP1)中,它可以正常编译,但是在
thresh_callback
函数结尾时出现错误。这是堆栈跟踪:(请注意,实际上,我对示例代码进行了略微修改,添加了一些printf-s和
contours.clear()
调用,该调用位于第143行,并触发了向量的重新分配[这会在函数的末尾],这似乎是问题的根源。确切的示例代码也发生了同样的问题。)问题似乎在于
contours
向量的重新分配。如果我尝试调用contours.clear()
也会发生同样的情况。我已经在VS调试器中检查了变量的内容,但据我所知,没有什么异常。我试图清除不再需要的向量(在
for
循环之后),但是它没有帮助。我还尝试将Platform Toolset切换到Visual Studio 10,这反过来甚至不会编译超出我的错误消息:任何帮助将不胜感激。请注意,我不是C ++程序员:我几乎没有知识,而对C ++编程和本机编程的了解甚至更少。
编辑 :事实证明调试器显示错误的行作为错误的来源。我应该在调用堆栈中看到问题出在vector>。因此,问题向量是
contours
,而不是hierarchy
!编辑#2 :我还尝试用创建
vector<vector<cv::Point> >
的最小代码重现该问题,然后在其中放入一些项目,然后清除它,但我无法重现该问题。