首页 > 解决方案 > Qt 调试器中的 reinterpret_cast 错误值

问题描述

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

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

TisfloatanArrayis a QByteArraywith values [40 A0 00 00]40 A0 00 00转换为 float 实际上应该是5,但由于某些奇怪的原因,它被评估为 周围的东西-10^38,但前提是在调试模式下运行。当我在 QtCreator 调试器之外启动程序时,该值被正确计算为5. 编辑:在另一台机器上,完全相同的代码和 Qt、mingw、...的组合绝对可以正常工作。

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

标签: c++qtwindbg

解决方案


好吧,我不使用 QtDebugger,但 windbg 似乎可以正确解释它

C:\>cdb -c ".formats 40a00000;q" cdb | grep -i Float
  Float:   low 5 high 0

C:\>

关于您的评论Maximum Float possible is ~-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:\>

推荐阅读