VS2013 OpenCV 2.4.9 “HEAP:Invalid Address specified to RtlValidateHeap( 000D0000, 019FEF18 )” 错误

在 VS2013、OpenCV 2.4.9 环境下,运行调试程序过程中先是出现“触发了一个断点”的异常:



中断停止调试后,输出窗口显示 “HEAP[XXX.exe]:Invalid Address specified to RtlValidateHeap( 000D0000, 019FEF18 )” 错误,错误定位在 “return 0;” 这一行。进行逐句注释排错后,初步确定错误来自于下面这行代码:

findContours(dilated, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);

但这个函数的用法是没有错误的,网上搜了下,有人说原因是在不同模块(工程)之间传递 C++ 类,而这两个模块用了不同的运行时库(Runtime Library)设置。例如:EXE 模块调用 DLL 模块里传递 C++ 类的函数,但 DLL 模块使用静态链接(Release 是 Multi-threaded (/MT)、Debug 是 Multi-threaded Debug (/MTd))方式编译,而 EXE 模块使用动态链接(Release 是 Multi-threaded DLL (/MD)、Debug 是 Multi-threaded Debug DLL (/MDd))方式编译,具体设置方式在 工程属性 - C/C++ - Code Generation - Runtime Library 中。


但哥尝试修改后仍然无法解决问题,然后我就想有没有可能是 VS2013 的调试器的问题,于是我把程序搬到了 VS2010 上试了试,果不其然,正常运行了!所以哥回到熟悉的 VS2013 ,在 项目 -> 属性 -> 配置属性 -> 常规 -> 平台工具集  把 Visual Studio 2013 (v120) 改为 Visual Studio 2010 (v100) ,这样,程序就可以完美运行了。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值