构造函数中的fp赋值崩溃[C ++]

时间:2012-12-19 16:50:31

标签: c++ crash

我在客户的电脑上发生了一次非常奇怪的“崩溃”。使用日志我能够跟踪它到这行代码:

myvar = 1; //这个'崩溃' myvar被声明为'double'

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

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

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

我真的没有想法......

2 个答案:

答案 0 :(得分:1)

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

我的猜测是,编译器现在默认使用某些旧处理器上没有的处理器功能。使用此编译器选项神奇地修复它: /拱:IA32

答案 1 :(得分:0)

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

更有可能的是,你已经破坏了堆,或者调用了未定义的行为,在某些地方以及你追踪的内容只是一个副作用。

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

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

但是......它绝不能简单地追踪这些错误的真正原因,最高警告级别,警告错误和静态代码检查器有助于保持大部分这些问题。