在一些继承的遗留代码中,我跟踪了输出中出现的随机垃圾到非初始化数据结构的问题。它被定义为:
MyArray: array of array of ShortString;
当我们从这个结构中读取值时,我们有时会得到明显来自Bad Place的垃圾,并且每次运行它时都会发生变化。
我认为这是初始化这个数组的正确方法:
FillChar (MyArray, SizeOf (MyArray), 0)
然而,当我开始阅读各种网站时,我开始怀疑自己。这是初始化此数组的最佳/正确方法吗? 0是正确的FillValue,还是应该是#32?
答案 0 :(得分:2)
由于未指定大小,因此这是一个动态数组。 Fillchar不是初始化它们的正确方法。由于它们是托管类型,因此会自动初始化。如果以后要清空阵列,可以使用SetLength(MyArray,0)
或MyArray := nil
。
答案 1 :(得分:-2)
Afaik短串不会自动初始化。因此,将setlength设置为正确的大小,例如
setlength(myarray,10,12);
然后将所有字符串的长度设置为0:
for i:=0 to length(myarray)-1 do
for j:=0 to length(myarray[i])-1
setlength(myarray[i][j],0);