неправильно интерпретировать неверные значения в Qt Debugger - PullRequest
0 голосов
/ 22 января 2019

Я использую 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 со значениями [40 A0 00 00].40 A0 00 00, преобразованный в число с плавающей точкой, на самом деле должен быть 5, но по какой-то странной причине он оценивается как что-то около -10^38, но только если выполняется в режиме отладки.Когда я запускаю программу за пределами отладчика QtCreator, значение правильно вычисляется как 5.РЕДАКТИРОВАТЬ: На другой машине точно такой же код и комбинация Qt, mingw, ... работает абсолютно нормально.

Я уже пытался перестроить весь проект, но это ничего не меняет.У кого-нибудь есть идея, как это происходит?И что более важно, как это исправить?

1 Ответ

0 голосов
/ 22 января 2019

хорошо, я не использую QtDebugger, но windbg, кажется, правильно его интерпретирует

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

C:\>

Относительно вашего комментария Максимальное число с плавающей точкой возможно ~ -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:\>
...