【求助】vs2017使用 最大优化(优选速度) (/O2)异常

mrljw 2018-05-17 03:40:49
我的程序是C写的控制台应用程序,应用下面两个工程属性优化生成的程序,程序运行途中,变量会有异常,

工程属性>>常规>>全程序优化>>使用链接时间代码生成
工程属性>>C/C++>>优化>>最大优化(优选速度) (/O2)

调试进去,malloc出来的变量中途没有对它做任何操作,变量的值会改变掉,导致exe最后运行的结果会变掉,比如下面,fun2中使用data的数据,调试进去发现data里的值已经跟fun返回的不一样了。但是不使用优化程序运行的速度又会比较慢

比如:
float *data = fun(); // fun 返回malloc生成的内存,并赋了初值
fun2(data); //fun2使用data的数据
free(data);

求解决方案,既能保留优化,运行又不会异常的
...全文
2600 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010744125 2019-05-31
  • 打赏
  • 举报
回复
你到处散播这种误人子弟的言论合适吗?何况和帖子主题毫无关系?还老师,呵呵~ 省省你的忠告吧,我们不需要。
引用 6 楼 赵4老师 的回复:
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程! 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步Debug版对应汇编一行! 单步Debug版对应汇编千行不如单步Release版对应汇编一行! 不会单步Release版对应汇编?在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有,然后在IDE中运行。(一般人我不告诉他!
qq_20755733 2021-07-27
  • 举报
回复
@u010744125 怎么到处都有这个赵四老师
schlafenhamster 2018-05-19
  • 打赏
  • 举报
回复
总之 你的 代码 还是有问题, 不要 怀疑 编译器 !
赵4老师 2018-05-18
  • 打赏
  • 举报
回复
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程! 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步Debug版对应汇编一行! 单步Debug版对应汇编千行不如单步Release版对应汇编一行! 不会单步Release版对应汇编?在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有,然后在IDE中运行。(一般人我不告诉他!
zgl7903 2018-05-18
  • 打赏
  • 举报
回复
SP 补丁是否是最新的? 代码逻辑上是否有指针++ 指针--等操作? 越界,异常?
redsunxin 2018-05-18
  • 打赏
  • 举报
回复
引用 2 楼 mrljw 的回复:
[quote=引用 1 楼 redsunxin 的回复:] 选最大速度就不要调试了,因为编译器为了速度删除了调试信息。我都是调试的时候选disabled,发布的时候max speed。
不只是调试,生成的exe运行的结果也不正确[/quote]那可能是某些变量没初始化,这两种运行方式,变量初始值不一样。还有把代码警告全部看一遍,基本都要消掉。
mrljw 2018-05-18
  • 打赏
  • 举报
回复
引用 5 楼 zgl7903 的回复:
SP 补丁是否是最新的? 代码逻辑上是否有指针++ 指针--等操作? 越界,异常?
vs2017有sp补丁的吗?
schlafenhamster 2018-05-17
  • 打赏
  • 举报
回复
float *data = fun(); // fun 返回malloc生成的内存,并赋了初值 具体代码 ?
mrljw 2018-05-17
  • 打赏
  • 举报
回复
引用 1 楼 redsunxin 的回复:
选最大速度就不要调试了,因为编译器为了速度删除了调试信息。我都是调试的时候选disabled,发布的时候max speed。
不只是调试,生成的exe运行的结果也不正确
redsunxin 2018-05-17
  • 打赏
  • 举报
回复
选最大速度就不要调试了,因为编译器为了速度删除了调试信息。我都是调试的时候选disabled,发布的时候max speed。

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧