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

即如何设置编译选项能使RELEASE版本像DEBUG一样编译生成解决方案。我已经把RELEASE版中的下列选项设置成和DEBUG一样了,但还是运行出现问题(不是编译不通过... 即如何设置编译选项能使RELEASE版本像DEBUG一样编译生成解决方案。
我已经把RELEASE版中的下列选项设置成和DEBUG一样了,但还是运行出现问题(不是编译不通过,是计算结果不正确,DEBUG版一切正常)
/MD /ML 或 /MT 使用发布版本的运行时刻函数库,已经使用DEBUG版的运行时刻库
/O1 或 /O2 优化开关,使程序最小或最快,优化那一页已经设置成和DEBUG完全一样,优化全关了。
/D "NDEBUG" 关闭条件编译调试代码开关 (即不编译assert函数)
/GF 合并重复的字符串,并将字符串常量放到只读内存,防止被修改。
所以DEBUG版和RELEASE版的内存分配方式是不同的 ,如何设置能让RELEASE版像DEBUG版一样分配内存。还有将变量自动初始化开关关闭。网上的文档上没有说如何关闭这些编译选项。
展开
 我来答
mingl0280
2013-12-26 · TA获得超过150个赞
知道小有建树答主
回答量:195
采纳率:0%
帮助的人:121万
展开全部
你是不是有变量没有初始化或者用了诸如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没有导致的。
fengswd
2013-12-26 · TA获得超过333个赞
知道小有建树答主
回答量:226
采纳率:0%
帮助的人:179万
展开全部
关注一下,对这两个版本的异同我也想学习一下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
leafsax
2013-12-26 · TA获得超过134个赞
知道小有建树答主
回答量:162
采纳率:0%
帮助的人:121万
展开全部
可能跟对齐方式有关系,看看你code中有没有类似结构体成员寻址之类的,这些要考虑对齐因素。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式