c++ - 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());
T
isfloat
和anArray
is a QByteArray
with values [40 A0 00 00]
。40 A0 00 00
转换为 float 实际上应该是5
,但由于某些奇怪的原因,它被评估为 周围的东西-10^38
,但前提是在调试模式下运行。当我在 QtCreator 调试器之外启动程序时,该值被正确计算为5
. 编辑:在另一台机器上,完全相同的代码和 Qt、mingw、...的组合绝对可以正常工作。
我已经尝试重建整个项目,但它并没有改变任何东西。有谁知道,这是怎么发生的?更重要的是如何解决它?
解决方案
好吧,我不使用 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:\>
推荐阅读
- unix - 用于在特定列的管道分隔文件中查找和删除不需要的字符串的 unix shell 脚本
- php - Codeigniter 选择和统计 MySQL 记录
- hyperledger-fabric - 在 Kafka/Zookeeper 场景中,排序节点是否相互通信?
- java - load data from csv to mysql database using java
- r - I want to draw scatterplot in year and month
- java - PostgreSQL:列“BOOLEAN_VALUE”是数字类型,但表达式是布尔类型提示:您需要重写或强制转换表达式
- spring - How can I exclude the conditions evaluation report from the console of a Spring boot application?
- javascript - Knockout JS - 根据可观察字段设置表格宽度
- django - Django rest framework browsable api is rendering both a PUT and a POST form when it should only be rendering a POST form
- html - 在 flexbox 网格中嵌入弹性项目