VC程序Debug版本和Release版本运行不一致问题
2012-06-07 10:36
591 查看
最近接了公司以前一个网络管理系统的项目,接着做。发现,一些功能Debug版本可以正常运行,而Release版本则报错。调试了几天发现了几个Debug版本与Release不一致的地方。
1. 对变量的初始化不一致。例如,char字符串匹配,在Debug正常,而Release不行,增加了memset(buf, '\0', sizeof(buf))后正常,切记不要写成buf[0] = '\0'就以为安全初始化了;
2. 内存分配方式不一致。例如,同一个结构体变量,在Debug版本是sizeof()返回36个字节,而Release版本是34个字节。可通过编译器设置来确定,注意几个选项Project->Settings菜单 a>General -> Microsoft Foundation Classes选项;b>C/C++ -> Category选General -> Optimizations选项;c>C/C++ -> Category选Code Generation -> Struct member alignment字节对齐选项。
主要是这两个问题导致Debug版本与Release版本程序结果不一致,在开发时,应该时常切换到Release版本测试。我现在居然还有几个同事发布Debug版本程序,理由是Debug发生了一些莫名其妙的问题解决不了。注意:Release版本肯定比Debug版本好,好的不仅仅是效率,还有安全和稳定。
1. 对变量的初始化不一致。例如,char字符串匹配,在Debug正常,而Release不行,增加了memset(buf, '\0', sizeof(buf))后正常,切记不要写成buf[0] = '\0'就以为安全初始化了;
2. 内存分配方式不一致。例如,同一个结构体变量,在Debug版本是sizeof()返回36个字节,而Release版本是34个字节。可通过编译器设置来确定,注意几个选项Project->Settings菜单 a>General -> Microsoft Foundation Classes选项;b>C/C++ -> Category选General -> Optimizations选项;c>C/C++ -> Category选Code Generation -> Struct member alignment字节对齐选项。
主要是这两个问题导致Debug版本与Release版本程序结果不一致,在开发时,应该时常切换到Release版本测试。我现在居然还有几个同事发布Debug版本程序,理由是Debug发生了一些莫名其妙的问题解决不了。注意:Release版本肯定比Debug版本好,好的不仅仅是效率,还有安全和稳定。
相关文章推荐
- VC程序Debug版本和Release版本运行不一致问题
- 为什么VC中DEBUG版本可以正常运行的程序有时无法在RELEASE版本下正常运行
- VC中DEBUG版本可以正常运行的程序有时无法在RELEASE版本下运行
- 记录一个问题:win32程序release版本和debug版本运行效果不同
- 为什么VC中DEBUG版本可以正常运行的程序有时无法在RELEASE版本下正常运行
- 为什么VC中DEBUG版本可以正常运行的程序有时无法在RELEASE版本下正常运行(转)
- opencv3.0程序在debug下可以运行,在release下运行报cv::exception错误问题
- 让VC编译的Release版本程序在其他机器上顺利运行
- VS中debug和release运行不一致的问题
- VC 6.0中怎样设置才能生成Debug或Release版本的程序?
- VC Debug程序可以运行,而Realse版本运行出错
- Debug版本下能运行而Release下不能运行的问题总结
- VC++调试程序、快捷键以及Debug版本与Release版本
- 程序在Debug、Release下运行及单独运行Debug下的exe文件时没有问题;可是单独运行Release所生成的exe文件时,点击某一个按钮时,程序崩溃
- DEBUG和RELEASE 版本差异及调试相关问题(VS - VC++)
- 让VC编译的Release版本程序在其他机器上顺利运行
- window程序DEBUG和RELEASE 版本差异及调试相关问题
- ARM:Release版本和Debug版本运行不一致的一种可能原因以及解决方法
- [2011-11-22] 教训:请记住如果要真正运行程序,要将项目从DEBUG改成RELEASE版本
- 针对VC版本及相关库的升级后程序无法运行问题举例说明