VC开发中HEAP CORRUPTION DETECTED错误

今天在VS2010调试项目中出现的问题,通过调用free出现了这个错误。一般VC的HEAP CORRUPTION DETECTED这类错误只有在开发的DEBUG版本上出现,Realse版本可能看不到这个错误,有时甚至软件程序还能正常运行,但是千万不能被表象所蒙蔽,随着时间的流逝,程序会因为一些莫名其妙的问题而崩溃,所以在Debug版本上出现这个问题是有其道理的,这里无非是对内存的操作出现了问题,内存经典的操作就是通过调用malloc申请内存,以及调用free释放内存,微软在调试模式下帮我们修改了这两个函数,特别是malloc多分配了一些空间,这些空间就是用于检测内存泄漏(Memory Leaks)和内存损坏(Memory damage)等一系列问题的。所以一旦出现这些问题,Debug版本下能立刻反应过来,告知HEAP CORRUPTION DETECTED以及详细原因并中止程序执行。不过我们如果点击调试,VC将跟踪到SDK的malloc实现中去,不是我们自己的程序问题点,这是比较头疼的地方。

首先出现内存泄漏,一般是内存泄漏不会出现这么明显的中断,所以判断是否因为分配内存损坏的原因,经典的是“野指针”问题,因为free释放指针指定的空间后不能置空指针,所以该指针就变成了野指针,其所指向的地址不是我们所期望的,如果这个时候调用free将造成内存损坏,Realse模式下可能会导致程序异常中止,Debug模式下就会出现HEAP CORRUPTION DETECTED的错误。

鉴于此我检查了代码,并没有找到类似问题,这时我的注意力集中在下面图片指示的一段文字上:

继续阅读“VC开发中HEAP CORRUPTION DETECTED错误”