我很好奇动态数组的最大长度是多少,所以我试了一下。
SetLength(dynArray, High(Int64));
这个值是9223372036854775807,我认为这应该是我可以引用的最大索引数。但是程序报错:
ERangeError with message 'Range check error'.
于是我尝试了:
SetLength(dynArray, MaxInt);
我尝试了相同的操作,但是出现了错误!
有趣的是,我可以使用以下方式进行调用:
SetLength(dynArray, Trunc(Power(2, 32));
这实际上是MaxInt大小的两倍!
我尝试过
SetLength(dynArray, Trunc(Power(2, 63) - 1));
这与High(Int64)相同,但也失败了。
除了不断尝试外,有人知道最大大小吗?它是否取决于数组中元素的大小?
我正在使用Delphi 2009。对于不同版本会有所不同吗(显然,当Commadore出现时,应该会更大!)
SetLength
函数接受一个类型为Integer
的长度参数。因此,尝试传递Int64
有点无意义。我本来希望编译器会对此发出警告。实际上会发生的是,64位整数的最高32位将被截断。 - David Heffernan