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;
答案 0 :(得分:7)
这显然是处理大量负数的一个错误。正数处理得很好。如果您可以拦截对Str
的来电,那么您可以确保只拨打Str
来传递正数,然后自己加-
前缀。
我已将错误提交给Quality Central:QC#103436。