在Qt调试器中reinterpret_cast错误的值

时间:2019-01-22 14:15:57

标签: c++ qt windbg

我正在将QtCreator 4.8.0与mingw 4.9.2,GDB 7.8和Qt 5.6.3结合使用,并且如果在调试器中运行,以下代码行会产生错误的值:

T* temp = reinterpret_cast<T*>(anArray.data());

Tfloat,而anArray是具有值QByteArray的{​​{1}}。 [40 A0 00 00]实际转换为浮点数应该是40 A0 00 00,但是出于某些奇怪的原因,它被评估为5附近,但仅在调试模式下运行。当我在QtCreator调试器之外启动程序时,该值正确计算为-10^38。 编辑:在另一台机器上,完全相同的代码和Qt,mingw,...的组合绝对可以正常工作。

我已经尝试重建整个项目,但是它没有任何改变。是否有人知道,这是怎么发生的?更重要的是如何解决它?

1 个答案:

答案 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:\>