问题由来:
debug版本运行正常,但是到Release版本的时候出现Crash;
提示:Release版本调试方法
1.工程项目上右键 -> 属性 2.c++ -> 常规 -〉调试信息格式 选 程序数据库(/Zi)或(/ZI), 注意:如果是库的话,只能(Zi) 3.c++ -> 优化 -〉优化 选 禁止(/Od) 4.连接器 -〉调试 -〉生成调试信息 选 是 (/DEBUG)
个人总结的几个可能的原因:
1.debug版本的配置,没有运用到Release版本。
具体经历:在程序中使用了dynamic_cast, 来向下转化类型(父类转向子类),而vs2005 默认是关闭运行时类型检测的(属性->c/c++->语言->启用运行时类型信息),从 而导致程序Crash。结果配置了debug,而Release 版本没有配置导致Crash;
2.主程序释放Dll 中申请的内存空间(跟运行时库选择MT,MD有关:c/c++->代码生成->运行时库)
在这个问题上MT,MD的区别主要。如果采用MD模式:使用的是同一个堆,不存在A堆申请,B堆释放的问题;如果采用MT这会出 现crash. MT,MD详解:http://www.cnblogs.com/cswuyg/archive/2012/02/03/2336424.html (依据文章,debug也应该会出现,但 本人当时遇到的情况确实是debug 正常运行Release有问题,可能也是两个版本配置不一样导致的)
3.无效内存的访问:越界,未初始化导致的野指针,删除以后没有置空的无效指针。