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

  • 相关阅读:
    Halcon学习(车牌识别)
    Keil新建STM32工程(LED灯)
    Keil新建STM32工程(LED灯)
    Keil STM32F4xx_DFP.1.0.8.pack下载链接
    android 如何单独编译 img及作用
    Linux绑定硬件IRQ到指定SOC的CPU核
    sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f)
    内核线程同步之completion
    kmalloc,vmalloc , malloc
    ARMv8 与 Linux的新手笔记(转载)
  • 原文地址:https://www.cnblogs.com/titer1/p/2293650.html
Copyright © 2011-2022 走看看