关于TList操作及释放的问题
2007-07-22 08:41
260 查看
大家都知道TList即可用于链表,又可用于数组,最近在做项目时遇到点小问题(可能是我对指针了解的不透彻吧),造成了不大不小的问题,下面就说说是怎么回事。
首先我先定义了Record及对应的指针类型。
PGoodsInfo = ^GoodsInfo;
GoodsInfo = record
ID : string;
Name : string;
Number : string;
end;
下面是定义变量及添加数据
var
GoodsList : TList;
P:PGoodsInfo;
begin
GoodsList := TList.Create;
New(P);
P^.ID := '****';
P^.Name := '*****';
P^.Number := '*****';
GoodsList.Add(P);
end;
下面是错误的释放代码
var
i:Integer;
begin
for i := 0 to GoodsList.Count - 1 do
begin
Dispose(GoodsList.Items[i]); //这会造成内存泄漏
end;
GoodsList.Clear;
end;
正确的释放代码
var
i:Integer;
PGoods: PGoodsInfo;
begin
for i := 0 to GoodsList.Count - 1 do
begin
PGoods := GoodsList.Items[i];
Dispose(PGoods);
end;
GoodsList.Clear;
end;
我想正是因为程序不知道指针所对应的数据类型才会造成内存泄漏,指出就可以啦。望大家吸取教训。
首先我先定义了Record及对应的指针类型。
PGoodsInfo = ^GoodsInfo;
GoodsInfo = record
ID : string;
Name : string;
Number : string;
end;
下面是定义变量及添加数据
var
GoodsList : TList;
P:PGoodsInfo;
begin
GoodsList := TList.Create;
New(P);
P^.ID := '****';
P^.Name := '*****';
P^.Number := '*****';
GoodsList.Add(P);
end;
下面是错误的释放代码
var
i:Integer;
begin
for i := 0 to GoodsList.Count - 1 do
begin
Dispose(GoodsList.Items[i]); //这会造成内存泄漏
end;
GoodsList.Clear;
end;
正确的释放代码
var
i:Integer;
PGoods: PGoodsInfo;
begin
for i := 0 to GoodsList.Count - 1 do
begin
PGoods := GoodsList.Items[i];
Dispose(PGoods);
end;
GoodsList.Clear;
end;
我想正是因为程序不知道指针所对应的数据类型才会造成内存泄漏,指出就可以啦。望大家吸取教训。
相关文章推荐
- 关于文件操作的问题
- 关于android源码文件操作,无权限问题
- 关于不同用户操作同一个文件的问题
- 关于动态操作select的option的值的问题
- 关于Hibernate操作数据库为空(数值类型)以及引起的问题的一点点总结
- 关于PicoBlaze 读操作的一个问题的讨论(二)
- 关于c++内存分配,释放及泄露问题
- linux的一些基本命令(关于文件操作, 进程操作,以及/boot问题)
- 使用DCOM组件服务操作Excel,权限问题,进程释放问题
- 【opencv学习】关于Mat释放的问题
- 关于C#操作WPS和office兼容性的问题
- 关于Objective-C 对象release操作的一个小问题探讨
- 关于链表操作的问题
- 字符集问题的初步探讨(七)--关于字符集更改的内部操作
- 关于QTableWidget的item所占内存的释放问题
- 关于Git安装和操作中可能碰到的问题
- 关于Linq操作DataTable的问题
- 关于jquery操作iframe中内容, 无法正常显示的问题
- 关于dealloc释放的问题
- 关于rm删除文件空间不释放的问题