• “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’,则再进行释放就出现了问题,最好是将分配好的内存指针赋值给成员变量,然后操作采用临时变量,最后释放成员变量。在此记一下这个错误,忘以后谨记

  • 相关阅读:
    @JsonFormat和@DateTimeFormat 实践测试
    spring jpa CrudRepository save 新建数据没有返回id
    多线程处理pdf附件转换
    contentsize ,ios 7和 ios7之前的 有点差别,
    区别,
    裁切图片,
    transform,
    简洁代码,
    这个系统,流程,入口,业务逻辑,
    pop,pop,如果break,会pop两次,
  • 原文地址:https://www.cnblogs.com/titer1/p/2293650.html
Copyright © 2020-2023  润新知