我在客户的电脑上发生了一次非常奇怪的“崩溃”。使用日志我能够跟踪它到这行代码:
myvar = 1; //这个'崩溃' myvar被声明为'double'
代码显然没问题。但myvar是一个类的成员变量。并且有一个这个变量的全局实例,代码行在构造函数中。所以它在main()之前执行。不是很好的风格,我知道......
我的问题: - 允许在main()之前使用float / double吗? - 我可以调用某种“InitFloatSystem()”函数吗?
更多信息: - 这是一个Win32 / C ++ - 没有崩溃消息,程序刚关闭 - try / catch没有帮助
我真的没有想法......
答案 0 :(得分:1)
我的猜测是,编译器现在默认使用某些旧处理器上没有的处理器功能。使用此编译器选项神奇地修复它: /拱:IA32
答案 1 :(得分:0)
除非您的二进制文件已损坏,否则简单的赋值不会导致崩溃 - 除非您重载了赋值运算符?
更有可能的是,你已经破坏了堆,或者调用了未定义的行为,在某些地方以及你追踪的内容只是一个副作用。
应用程序验证程序在Windows上非常方便,可以帮助跟踪这些事情:
http://msdn.microsoft.com/en-us/library/ms220948(v=vs.90).aspx
但是......它绝不能简单地追踪这些错误的真正原因,最高警告级别,警告错误和静态代码检查器有助于保持大部分这些问题。