VS2013 OpenCV 2.4.9 “HEAP:Invalid Address specified to RtlValidateHeap( 000D0000, 019FEF18 )” 错误
2015-03-18 10:02
495 查看
在 VS2013、OpenCV 2.4.9 环境下,运行调试程序过程中先是出现“触发了一个断点”的异常:
![](http://img.blog.csdn.net/20150318100745320?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU2Fjb21wbGV4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
中断停止调试后,输出窗口显示 “HEAP[XXX.exe]:Invalid Address specified to RtlValidateHeap( 000D0000, 019FEF18 )” 错误,错误定位在 “return 0;” 这一行。进行逐句注释排错后,初步确定错误来自于下面这行代码:
但这个函数的用法是没有错误的,网上搜了下,有人说原因是在不同模块(工程)之间传递 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) ,这样,程序就可以完美运行了。
中断停止调试后,输出窗口显示 “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) ,这样,程序就可以完美运行了。
相关文章推荐
- VS2012(2013、2015) OpenCV “HEAP:Invalid Address specified to RtlValidateHeap( 000D0000, 019FEF18 )
- HEAP[xxx.exe]:Invalid Address specified to RtlValidateHeap 错误的解决方法总结
- GPU(CUDA)学习日记(五)------ 动态数组一些说明以及Invalid address specified to RtlValidateHeap 错误
- HEAP[xxx.exe]:Invalid Address specified to RtlValidateHeap 错误的解决方法总结
- HEAP[xxx.exe]:Invalid Address specified to RtlValidateHeap 错误的解决方法
- “Invalid Address specified to RtlValidateHeap”错误? 解决方案 【汇总】
- GPU(CUDA)学习日记(五)------ 动态数组一些说明以及Invalid address specified to RtlValidateHeap 错误
- HEAP[xxx.exe]:Invalid Address specified to RtlValidateHeap 错误的解决方法总结
- HEAP[xxx.exe]:Invalid Address specified to RtlValidateHeap 错误的解决方法总结
- HEAP[xxx.exe]:Invalid Address specified to RtlValidateHeap 错误的解决方法总结
- Invalid Address specified to RtlValidateHeap 错误
- Invalid Address specified to RtlValidateHeap
- Invalid Address specified to RtlValidateHeap
- Invalid Address specified to RtlValidateHeap
- Invalid Address specified to RtlValidateHeap 无说明总结
- Invalid Address specified to RtlValidateHeap
- Invalid Address specified to RtlValidateHeap
- Invalid Address specified to RtlValidateHeap
- 跨DLL边界传递CRT对象的隐患(或诸如:HEAP[]: Invalid Address specified to RtlValidateHeap(#,#)问题出现的原因)
- Invalid Address specified to RtlValidateHeap