最近写了个VC小软件,调试发现debug和release下运行结果不一致。
查了半天发现好像是new的堆内存未释放导致的问题(不确定,但是delete []buf;后不一致问题解决了)。
第一次发现这个问题,特意记录下。
网上搜索的其他可能导致不一致的情况:
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版本好,好的不仅仅是效率,还有安全和稳定。