Delphi XE2 - System.Str改变/坏了吗?

时间:2012-02-15 17:16:02

标签: delphi delphi-xe2

Delphi XE2中的System.Str发生了一些变化。以下程序:

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位。有什么想法吗?

编辑:额外信息

这似乎只发生在负数大的情况下。 Str似乎会生成长字符串,当它们超过~130个字符时会断开。

注意:当仅使用宽度(其中i =某个宽度)时,这不会中断

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

1 个答案:

答案 0 :(得分:7)

这显然是处理大量负数的一个错误。正数处理得很好。如果您可以拦截对Str的来电,那么您可以确保只拨打Str来传递正数,然后自己加-前缀。

我已将错误提交给Quality Central:QC#103436