Delphi XE2 - System.Str изменен / сломан? - PullRequest
1 голос
/ 15 февраля 2012

Что-то изменилось с System.Str в Delphi XE2. Следующая процедура:

procedure someProcedure;
var 
  E:double;
  outString:string;
begin
  E:=-1.7E+308;
  Str(E:i:j, outString);
end;

Вызывает нарушение прав доступа

(класс исключений $ C0000005, нарушение доступа по адресу 0x00407318: чтение адреса 0x30303028)

в Delphi XE2, где «i» и «j» - любые целые числа. Этот же код прекрасно работает в Delphi 2010 и возвращает outString = '-1.7E + 0308'. Аналогичный код используется в некоторых компонентах TurboPower Orpheus, и он вызывает сбой всей IDE при ошибке BEX.

Это в Win7 64-bit. Есть идеи?

Редактировать: дополнительная информация

Это, кажется, происходит только с большими отрицательными числами. Кажется, что Str генерирует длинные строки, которые ломаются, когда они превышают ~ 130 символов.

Примечание: это не нарушается при использовании только ширины (где i = некоторая ширина)

procedure someProcedure;
var 
  E:double;
  outString:string;
begin
  E:=-1.7E+308;
  Str(E:i, outString);
end;

1 Ответ

7 голосов
/ 15 февраля 2012

Это явно ошибка с обработкой отрицательных чисел большой величины. Положительные числа обрабатываются отлично. Если вы можете перехватить вызовы на Str, тогда вы можете быть уверены, что звоните только Str, передавая положительные числа, а затем сами префикс -.

Я отправил сообщение об ошибке в Quality Central: QC # 103436 .

...