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

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

VS2013 OpenCV 2.4.9 “HEAP:Invalid Address specified to RtlValidateHeap( 000D0000, 019FEF18 )” 错误_第1张图片


中断停止调试后,输出窗口显示 “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) ,这样,程序就可以完美运行了。


你可能感兴趣的:(error,opencv,VS2013)