这段代码是否内存泄露呢?

ahpei 2003-04-23 02:07:31
摘自 SakMail 组件。
function TSakPOP.RetrieveAllMessagesExt( var SakMsgList: TSakMsgList;
const OnlyHeaders: boolean): integer;
var
i, count: integer;
aSakMsg: TSakMsg;
begin
SakMsgList.clear;
count := 0;
for i := 1 to FMsgsCount do
begin
if FMessagesDeleted.IndexOf( intToStr( i)) = -1 then
begin
aSakMsg := TSakMsg.Create( self);

if OnlyHeaders then
RetrieveMessageOnlyHeaders( i, aSakMsg)
else
RetrieveMessage( i, aSakMsg);

if FCanceled then
begin
aSakMsg.Free;
break;
end else
begin
SakMsgList.Add( aSakMsg);
inc( count);
end;
end;
end;
result := count;
end;
...全文
55 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahpei 2003-04-23
  • 打赏
  • 举报
回复
大大增长见识。佩服.
INeedCa 2003-04-23
  • 打赏
  • 举报
回复
你察看一下SakMsgList在Clear时是否析构了它的Items,没有的话,就有问题了。
INeedCa 2003-04-23
  • 打赏
  • 举报
回复
SakMsgList会管理它的Item的,所以它仅仅析构没有加入SakMsgList的aSakMsg。

另,如果在加入SakMsgList之后就析构了这个aSakMsg,外部调用SakMsgList中的Item时会发生错误。
INeedCa 2003-04-23
  • 打赏
  • 举报
回复
看不出来有什么泄漏。
zjybestzjybest 2003-04-23
  • 打赏
  • 举报
回复
如果 TSakMsgList是TCOMPONENTLIST的子类不会有泄露,因为当TSakMsgList被FREE掉的时候他所有的ITEM都要被他调用FREE
ahpei 2003-04-23
  • 打赏
  • 举报
回复
我也觉得是这样,很多组件其实存在大量问题,
现在这段代码就明显的没有Free了.
zleeway 2003-04-23
  • 打赏
  • 举报
回复
如果非FCanceled 就没有执行aSakMsg.Free
所以要把放到IF语句的后面,只要Create过,就要Free

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧