“Invalid Address specified to RtlValidateHeap”错误? 解决方案 【汇总】

[VC] 如何解决“Invalid Address specified to RtlValidateHeap”错误?

2008年09月17日 星期三 21:41

一个可能的原因:在不同模块(工程)之间传递 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,看看设置是否一样,如果不一样要改成一样的。

如果无法解决问题,那就是别的原因了。

 

 

Invalid Address specified to RtlValidateHeap

  调试一个程序,在非break point的地方,弹出窗口,说是出现错误,看底部 out put窗口说是Invalid Address specified to RtlValidateHeap,初步认为是指针释放的错误,又走了一边程序,并没有重复释放的嫌疑,于是就边debug 边观察IDE中的call stack 发现问题出现在析构函数中的自定义的release方法,由于习惯,在定义类的时候常定义一个release方法,用于在类析构的时候检查动态分配的内存是否都已经正确的释放,这里出来问题说明还是指针的问题,仔细检查,发现自己定义了一个LPTSTR指针,起初对其进行了内存的分配,在程序中对字符串进行操作的过程中对其进行了++,于是最后该指针指向了‘\0’,则再进行释放就出现了问题,最好是将分配好的内存指针赋值给成员变量,然后操作采用临时变量,最后释放成员变量。在此记一下这个错误,忘以后谨记

原文链接: https://www.cnblogs.com/titer1/archive/2011/12/19/2293650.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    “Invalid Address specified to RtlValidateHeap”错误? 解决方案 【汇总】

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/38849

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 下午3:27
下一篇 2023年2月8日 下午3:28

相关推荐