全部博文(788)
分类:
2008-10-14 16:38:58
调试看值
RecList.Add(pBuf);
New(pBuf);
不加才怪
正常的,你用New(pBuf);来分配内存了,内存就会添加
可是我在那里释放呢?
在这个函数里Dispose(pBuf),好像数据会不对啊。
在"RecList.Add(pBuf);"之后将pBuf释放
而且RecList.Add()....本身也是再不断增加内存
在释放RecList时先要释放它里保存的数据,
用一个循环,释放里面的每一个buf.
Dispose(pBuf);
~~~~~~~这个参数类型必须和New()中的参数类型一致
建议你直接返回一个TList,result被赋值之后就dispose(pbuf)
TLIST中保存的是一个指针.
要是在添加后就dispose(pbuf)会造成返回的TLIST保存的全部都是无效指针的。
问题就在于你使用了TList链表,TList中保存的仅仅是数据指针,当TList释放的时候也只是将TList本身释放掉了,而该指针指向的内存区域并没有释放掉,因此导致你在函数中new获得的内存在链表释放的时候并没有释放掉.
建议:改用其他具有确定数据类型的List类,或者从TList继承一个新类,自己重写释放代码.
假设 pBuf的定义如下
var
pBuf: PMyRec;
其中
PMyRec = ^TMyRec;
TMyRec = record
...
end;
则
New(pBuf);
执行结果是分配了SizeOf(TMyRec)大小的内存,并使pBuf指向该内存。