在构造函数[C ]中的FP分配上崩溃
Crash on fp-assignment in constructor [C++]
我在客户的计算机上有一个非常奇怪的'崩溃'。使用日志,我能够将其跟踪到此代码线:
myvar = 1;//此"崩溃"。Myvar被宣布为" double"
代码显然可以。但是Myvar是一堂课的成员变量。并且该变量有一个全局实例,并且代码线在构造函数中。因此,它已在main()之前执行。不好的风格,我知道...
我的问题: - 允许在main()之前使用float/double? - 我可以称呼某种" initfloatsystem()"功能?
更多信息: - 这是Win32/c - 没有崩溃消息,程序才关闭 - 尝试/捕获无济于事
我真的没有想法...
最后,最终找到了问题。这是Visual Studio 2012的问题。我在Microsoft网站上找到了不同的副作用:http://connect.microsoft.com/visalstudio/feedback/details/771122/floating-point-point-point-point-math-change-from-vs2008-to-vs2012-效果 - 现代代码,但不管理的代码
我的猜测是编译器现在使用默认的处理器功能,某些旧处理器上无法使用。使用此编译器选项神奇地修复了它:/ARCH:IA32
,除非您的二进制损坏,否则绝对不应导致简单的任务造成崩溃 - 除非您超载了分配运算符?
您很有可能破坏了堆,或者调用未定义的行为在某些地方以及您所追踪的内容只是此的副作用。
应用程序验证程序在窗口上非常方便,可以帮助追踪这些内容:
http://msdn.microsoft.com/en-us/library/ms220948(v = vs.90).aspx
但是..绝不是追踪这些错误的实际原因,最高警告级别,警告作为错误和静态代码检查器有助于将这些问题的大部分置于BAY中。
- 将数组的地址分配给变量并删除
- vector.resize()中的分配错误
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- Win32编译器选项和内存分配
- 函数中堆分配的效果与缺少堆分配的情况
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 获取字符串的长度并将其分配给数组
- 将地址分配给本地指针后,公共对象的变量将消失
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 我在二维向量中是否正确分配了内存
- 正在尝试重载二进制搜索树分配运算符
- GlobalAlloc而不是其他分配方法
- 自定义先决条件对移动分配运算符有效吗
- 我可以重新分配/覆盖std::字符串吗
- 在c++中使用动态分配的问题
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 为什么我可以使用比分配的内存更多的内存
- 在构造函数[C ]中的FP分配上崩溃