奇怪的 MSC 8.0 错误:“ESP 的值未在函数调用中正确保存......”

新手上路,请多包涵

我们最近尝试将我们的一些 Visual Studio 项目分解为库,并且在一个测试项目中,一切似乎都可以很好地编译和构建,其中一个库项目作为依赖项。但是,尝试运行该应用程序给了我们以下令人讨厌的运行时错误消息:

运行时检查失败 #0 - ESP 的值未在函数调用中正确保存。这通常是调用使用不同调用约定声明的函数指针的结果。

我们甚至从未为我们的函数指定调用约定(__cdecl 等),将所有编译器开关保留为默认值。我检查了项目设置对于跨库和测试项目的调用约定是一致的。

更新:我们的一位开发人员将“基本运行时检查”项目设置从“两者(/RTC1,等效于 /RTCsu)”更改为“默认”,运行时消失了,使程序运行正常。我完全不相信这一点。这是一个适当的解决方案,还是一个危险的黑客攻击?

原文由 user11180 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 780
1 个回答

值得指出的是,这也可能是 Visual Studio 错误。

我在 VS2017、Win10 x64 上遇到了这个问题。起初它是有道理的,因为我正在做一些奇怪的事情,将其转换为派生类型并将其包装在 lambda 中。但是,我将代码还原为之前的提交,但仍然出现错误,即使它以前不存在。

我尝试重新启动然后重建项目,然后错误消失了。

原文由 stands2reason 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题