C++中Release版本和DEBUG版本编译选项差别的问题。

即如何设置编译选项能使RELEASE版本像DEBUG一样编译生成解决方案。
我已经把RELEASE版中的下列选项设置成和DEBUG一样了,但还是运行出现问题(不是编译不通过,是计算结果不正确,DEBUG版一切正常)
/MD /ML 或 /MT 使用发布版本的运行时刻函数库,已经使用DEBUG版的运行时刻库
/O1 或 /O2 优化开关,使程序最小或最快,优化那一页已经设置成和DEBUG完全一样,优化全关了。
/D "NDEBUG" 关闭条件编译调试代码开关 (即不编译assert函数)
/GF 合并重复的字符串,并将字符串常量放到只读内存,防止被修改。
所以DEBUG版和RELEASE版的内存分配方式是不同的 ,如何设置能让RELEASE版像DEBUG版一样分配内存。还有将变量自动初始化开关关闭。网上的文档上没有说如何关闭这些编译选项。

你是不是有变量没有初始化或者用了诸如i=i++ + ++i这种未定义行为!这两种情况必须考虑!尽量别去考虑debug和release的内存分配方式!追问

i=i++ + ++i这种未定义行为,这样的行为会被跳过么?我知道哪个函数RELEASE版出问题了,你能帮我看看哪里有问题么?
n = 4; int nr = img->height; int nc = img->width; int total = nr * nc; memset(labels, 0, total * sizeof(int));这是函数定义和变量初始化,你看看有没有问题。

追答

未定义行为是会被编译器跳过(不报错,不警告)但是就是会出问题的。。。
问题出在memset这里(应该是),memset在debug和release下有时候有执行差别。如果你的labels整个都要初始化你可以考虑替换为
const int tot = total;
数据类型 lables[tot] = {0};这样初始化。。。
然后你得检查一下你的debug版,把所有变量初始化全部检查一遍,因为release和debug的变量初始化是不一致的,一般这种问题都是由于debug初始化了变量而release没有导致的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-26
关注一下,对这两个版本的异同我也想学习一下。
第2个回答  2013-12-26
可能跟对齐方式有关系,看看你code中有没有类似结构体成员寻址之类的,这些要考虑对齐因素。
相似回答