不用遍历,如何将记录或数组里的所有元素快速清零?(200分)

  • 主题发起人 雁孤行
  • 开始时间
FillChar等不能清零的数组有:
a: array[0..100] of string;
b: array[0..100] of TObject;
...
因为对象都是存在堆中的,数组中只是存的指针,清除数组的结果是...,内存泄漏
同样的道理可用于string类型和其它只存指针在数组里的类型.

记录也是一样:
Ta = record
a1: integer;
a2: string[3];
end;
可以正常清除
Tb = record
b1: integer;
b2: ansistring;
end;
不能正常清除

综上所述,FillChar等函数并不是万能的.只能正确清除简单数据类型的数组和记录.
实在不行的时候,你只能for它一次了:)
 
to skyweb:
a: array[0..100] of string;
b: array[0..100] of TObject;
似乎也行呀,您试试:
FillChar(a,sizeof(a),0);
FillChar(b,sizeof(b),0);
 
不错,支持!!
 
请问各位兄弟:
如果是在几百兆的数据库中,怎样不通过遍历或最少循环来达到其某一数据列的计算,谢谢!!
 
Fillchar函数。
 
不如定义一个类,free掉就什么多没有了
用链表好像不用编历都可以清空,斩断就可以了
 
定义一个和全局变量一样的局域变量,将局域变量Copy或Move到
全局变量中。

 
不如重新创建了
 
to zw84611:
a: array[0..100] of string;
b: array[0..100] of TObject;

FillChar(a,sizeof(a),0);
FillChar(b,sizeof(b),0);
确实可以把数组清零了,但这只是把一个指针数组清零了,
没能释放数组引用到的string和TObject对象所占用的空间,
造成所谓的内存泄漏,大量的内存泄漏不用说会引起什么情况:内存耗尽……系统崩溃!
 
to skyweb:
:),人家说“清零”,也没说要“释放”呀。你释放了,如果后面还要用到怎么办?
 
多人接受答案了。
 

Similar threads

回复
0
查看
818
不得闲
回复
0
查看
683
不得闲
S
回复
0
查看
956
SUNSTONE的Delphi笔记
S
S
回复
0
查看
778
SUNSTONE的Delphi笔记
S
顶部