集合型数组如何清空?(100分)

月光

Unregistered / Unconfirmed
GUEST, unregistred user!
type myrec = record
s: string;
i: integer;
d: double;
end;
tmyarray = array[0..200] of myrec;
var i:integer

myarray: tmyarray;
begin
for i := 0 to 200 do
begin
myarray.s := '';
myarray.i := myarray.i + 1;
myarray.d := myarray.d + 2;
end
end;

第一次赋值后想清空数组好第二次赋值,查了查用 myarray:=nil;或
SetLength(myarray,0);都不行,有简单点的办法吗?
 
你对数据没有正确理解:
tmyarray = array[0..200] of myrec; // 这里定义的Tmyarray就可以用了,
var i:integer

myarray: tmyarray
// 这里再次定义myarray为tmyarray类型,为何????

for i := 0 to 200 do
begin
tmyarray.s := ''
// 直接用tmyarray就可以了。
tmyarray.i := myarray.i + 1;
tmyarray.d := myarray.d + 2;
end

它是自管理类型的,不需要释放,直接重新赋值就行了
 
直接重新赋值怕把第一次倒的数据和第二次倒的搞混了,问题已解决,用ZeroMemory(@myarray,sizeof(myrec)*201),现在我想问的是如果把上面的改成动态数组,应该改哪里?我是菜鸟,请指教
 
tmyarray = array of myrec;

用之前
setlength(myarray,200);
 
一维动态数组可以这样:
ZeroMemory(@myarray[0],sizeof(myrec)*Length(myarray));
多维的就不行了,各维之间不是连续的。
 
andy263,请问如果事先并不知道有多少数据呢?
 
用动态数组。
 
多维静态数组也是连续的,多维动态数组可以在zeromemory前调用finalize清空
 
ZeroMemory会造成内存泄漏吧,如果那个s有值的话?
 
因为 tmyarray = array[0..200] of myrec;是个静态数组类型
静态数组一旦占用了空间,就不会自动或手动释放了
你只能用动态数组,用setlength分配空间,用nil手动释放
用动态数组这么做
type myrec = record
s: string;
i: integer;
d: double;
end;
tmyarray = array of myrec;
var i:integer

myarray: tmyarray;
begin
for i := 0 to 200 do
begin
setlength(myarray,length(myarray)+1);
myarray.s := '';
myarray.i := myarray.i + 1;
myarray.d := myarray.d + 2;
end
end;
 
接受答案
 

Similar threads

S
回复
0
查看
952
SUNSTONE的Delphi笔记
S
S
回复
0
查看
775
SUNSTONE的Delphi笔记
S
回复
0
查看
725
老衲
I
回复
0
查看
739
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
顶部