【问题标题】:App works properly in DEBUG mode, but RELEASE mode shows error应用程序在DEBUG模式下正常工作,但RELEASE模式显示错误
【发布时间】:2016-08-24 18:43:13
【问题描述】:

最近我将我的应用程序从 Visual Studio 2013 迁移到 Visual Studio 2015。在 DEBUG 模式下一切正常,但如果我切换到 RELEASE 模式,则会弹出此错误:“MyApp 中 0x773F7FB2 (ucrtbase.dll) 处的未处理异常。 exe:一个无效的参数被传递给一个认为无效参数致命的函数”(在我的应用程序中,我传递了一个指向列表的指针)。此错误的原因可能是什么? 编辑: 当我使用 VS 2013 时,一切正常。这不是VS 2015的问题吗?

【问题讨论】:

  • 显示您的代码。你可能很幸运它在调试模式之前/在调试模式下工作。
  • 可能是未定义的行为,调试程序的发布版本。
  • 通常这意味着你在某个地方使用了一个未初始化的变量,但它几乎可以是任何东西。调试版本将未初始化的变量设置为已知值,但发布版本将其随机化。
  • 指针在释放模式下可能指向随机内存,不像在调试模式下,就像@MarkRansom 建议的那样。
  • 编辑:当我使用 VS 2013 时,一切正常。 - 看起来 VS 2015 在您的应用程序的 VS 2013 版本中暴露了一个隐藏的错误。心存感激。

标签: c++ visual-studio-2013 visual-studio-2015 release-mode


【解决方案1】:

如果您想要一个正确的答案,您应该发布您的代码。没有它,我(我们)所能做的就是猜测。

无论如何;发布模式和调试模式之间存在许多差异。除了启用/禁用优化之外,局部变量在调试版本中通常为零初始化(或默认初始化),但由于标准没有强制要求,因此发布版本(优化版本)不会打扰,因为它的成本很高。这只是一个例子——还有更多——但我是在咬你。

无论如何;您的程序似乎包含未定义的行为 - 这基本上意味着您不能相信它可以正确地做任何事情,而优化编译器只是利用它比在调试模式下更多地利用它。

不要编写包含未定义行为的损坏程序!它咬人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 2020-04-17
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-20
    相关资源
    最近更新 更多