opencv已触发断点为RtlValidateHeap指定的无效地址

时间:2014-08-05 07:28:41

标签: opencv dll vector breakpoints

我在Visual Studio 2013中用C ++和OpenCV 2.49编写了一些代码:

cv::Mat mask = Mat::zeros(tmp.size(), CV_8UC1);

修改一些元素为零的掩码,一些元素为255的

cv::vector<cv::vector<cv::Point> > contours;
cv::vector<cv::Vec4i> hierarchy;
cv:findContours(mask, contours, CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE);
cv::imshow("Mask", mask);

方法结束时,出现以下错误:

为RtlValidateHeap指定的地址无效(004D0000,22EBD9D8) Project.exe已触发断点。

我在stackoverflow和其他平台上搜索但找不到答案!

我在“path”环境变量中添加了正确的opencv路径:C:\ opencv \ build \ x86 \ vc12 \ bin 以及项目配置: C:\的OpenCV \建立\ 86 \ VC12 \ lib中

如果我使用opencv api中的merge / split它会导致相同的错误,但在这种情况下,可以在进入方法之前分配ther vector。然后它工作。在这种情况下,以前不可能分配矢量,因为我现在不是大小。

我认为问题是opencv分配内存并且不在正确的堆中,但我检查了所有dll和路径。你还有其他想法吗?

提前致谢!

编辑: 我用一个新下载的opencv替换了opencv文件夹并且它有效,不要问我为什么!

1 个答案:

答案 0 :(得分:1)

cv :: vector声明有效吗?你应该尝试std :: vector而不是它们。 基于给定的代码,很难确定导致问题的原因。你能提供更多细节吗?

另请注意,此&#34;功能会在提取轮廓时修改图像&#34;

您还应该检查以下属性:

  1. 右键单击项目
  2. 属性 - 配置属性 - 常规:将 Plattform工具集设置为 Visual Studio 2013(v120)
  3. 配置属性 - C / C ++ - 代码生成 - 设置运行时库: 用于调试版本的多线程调试DLL(/ MDd)多线程 用于发布版本的DLL(/ MD)