Invalid Address specified to RtlValidateHeap
来源:互联网 发布:淘宝66大促是什么 编辑:程序博客网 时间:2024/05/27 20:09
Invalid Address specified to RtlValidateHeap
VC编程,最后推出对话框的时候,会有错误提示声音“硄”,但是没有弹出错误提示对话框,症状描述与下面的类似:
声音就和Assertion Failure一样,但是什么框框都没弹出来,最后Output窗口中显示has exited with code 3 (0x3).http://topic.csdn.net/u/20080924/20/d9347148-61fd-40d5-a892-0879dbae1815.html
单步调试,在程序退出的地方OnDestroy()函数内设置断点,发现错误:Invalid Address specified to RtlValidateHeap……
查找原因,发现是,在不同模块(工程)之间传递 C++ 类,而这两个模块用了不同的运行时库(Runtime Library)设置。
修改:Project->Setting->General->Microsoft Foundation Classes:Use MFC in a Static Library.
因为Win32 Debug,C/C++选项的Category中对应的Code Generation选项,选择了Use run-time library:Debug Multithreaded DLL,对应的Win32Release选择了Multithreaded DLL。使用了动态库,与前面的静态库不符合。引起错误。修改Microsoft Foundation Classes:Use MFC in a Shared Dll。重新编译程序,没有在出现错误的声音。
参考:http://blog.csdn.net/bao_qibiao/article/details/5257150
一.首先是”Invalid Address specified to RtlValidateHeap “
找到了这篇文章:http://hi.baidu.com/umu618/blog/item/d4e8242e424e3e564fc226d3
“一个可能的原因:在不同模块(工程)之间传递 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 ,看看设置是否一样,如果不一样要改成一样的。“
二.把我的exe工程属性改成和dll一样的Multi-threaded Debug DLL (/MDd)后,
出现nafxcwd.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argv
找到这篇文章:http://blog.csdn.net/pbdwadr/archive/2007/09/07/1775675.aspx,如下:
” 1.
2.
3. 【错误提示】:msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol_WinMain@16
4. 【错误提示】: nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex