我正在将QtCreator 4.8.0与mingw 4.9.2,GDB 7.8和Qt 5.6.3结合使用,并且如果在调试器中运行,以下代码行会产生错误的值:
T* temp = reinterpret_cast<T*>(anArray.data());
T
是float
,而anArray
是具有值QByteArray
的{{1}}。 [40 A0 00 00]
实际转换为浮点数应该是40 A0 00 00
,但是出于某些奇怪的原因,它被评估为5
附近,但仅在调试模式下运行。当我在QtCreator调试器之外启动程序时,该值正确计算为-10^38
。
编辑:在另一台机器上,完全相同的代码和Qt,mingw,...的组合绝对可以正常工作。
我已经尝试重建整个项目,但是它没有任何改变。是否有人知道,这是怎么发生的?更重要的是如何解决它?
答案 0 :(得分:0)
好吧,我没有使用QtDebugger,但是windbg似乎正确地解释了它
C:\>cdb -c ".formats 40a00000;q" cdb | grep -i Float
Float: low 5 high 0
C:\>
关于您的评论Maximum Float可能是〜-3 * 10 ^ 38,因此-10 ^ 39不能用32位浮点数表示
C:\>cdb -c ".formats ff7fffff;q" cdb | grep Float
Float: low -3.40282e+038 high 0
C:\>grep -inhr (\-FLT_MAX "c:\Program Files\Windows Kits\10\Include\10.0.16299.0\*"
1117: return -3.402823466e+38f; // Smallest float value (-FLT_MAX)
C:\>