0

我在客户的计算机上发生了非常奇怪的“崩溃”。使用日志,我能够将其跟踪到这行代码:

我的变量 = 1; //这'崩溃'。myvar 被声明为“双”

代码显然没问题。但是 myvar 是一个类的成员变量。这个变量有一个全局实例,代码行在构造函数中。所以它在main()之前执行。风格不好,我知道...

我的问题: - 是否允许在 main() 之前使用 float/double?- 我可以调用某种“InitFloatSystem()”函数吗?

更多信息: - 它是 Win32 / C++ - 没有崩溃消息,程序只是关闭 - try/catch 没有帮助

我真的没主意了...

4

2 回答 2

1

终于,终于找到了问题所在。这是 Visual Studio 2012 的问题。我在 Microsoft 网站上发现,尽管他们报告了不同的副作用:http ://connect.microsoft.com/VisualStudio/feedback/details/771122/floating-point-math-change-from -vs2008-to-vs2012-affects-native-code-but-not-managed-code

我的猜测是编译器现在默认使用某些旧处理器上不可用的处理器功能。使用这个编译器选项神奇地修复了它:/arch:IA32

于 2013-01-10T09:12:36.400 回答
0

除非您的二进制文件已损坏,否则简单的赋值不会导致崩溃 - 除非您重载了赋值运算符?

很可能是您损坏了堆,或者在某些地方调用了未定义的行为,并且您所追踪的只是这种情况的副作用。

应用程序验证器在 Windows 上非常方便,可以帮助追踪这些事情:

http://msdn.microsoft.com/en-us/library/ms220948(v=vs.90).aspx

但是.. 追查这些错误的真正原因绝非易事,最高警告级别,错误警告和静态代码检查器有助于避免大多数这些问题。

于 2012-12-19T19:09:35.333 回答