如何处理的代码!

Nizvoo 2002-07-10 12:55:51
定义一个函数

function aa: TStringList;
var
stlResult: TStringList;
begin
stlResult := TstringList.Create;
Result := stlResult;
stlResult.Free; //如果无此句,则正确,因为释放后Result就不知道指向哪里了
end;

请指教,批评
...全文
51 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Nizvoo 2002-07-24
  • 打赏
  • 举报
回复
UPUP~~~~~~~~~~~~~~~~
Nizvoo 2002-07-10
  • 打赏
  • 举报
回复
再接
Nizvoo 2002-07-10
  • 打赏
  • 举报
回复
各位,谢谢啦~~~~~~~~~~~~~~~~

Kingron 2002-07-10
  • 打赏
  • 举报
回复
用Zswang的方法,或者这样:
function aa:TStringList;
begin
Result:=TStringList。Create;
Result。Add(‘abc’);
。。。。。
end;

var
T:TStringList;
。。。
T:=aa;
ShowMessage(T。Text);
T。Free;
这样也不会有内存泄漏吧?
dearmyfriend 2002-07-10
  • 打赏
  • 举报
回复
zswang(伴水)说得对
王集鹄 2002-07-10
  • 打赏
  • 举报
回复
function aa(mStrings: TStrings): Boolean;
begin
Result := False;
if not Assigned(mStrings) then Exit;
{ TODO : 处理mStrings }
Result := True;
end;

//demo
aa(Memo1.Lines);
Nizvoo 2002-07-10
  • 打赏
  • 举报
回复
有没有补救措施
王集鹄 2002-07-10
  • 打赏
  • 举报
回复
function aa: TStringList;
var
stlResult: TStringList;
begin
stlResult := TStringList.Create; //得到一个TStringList实例的地址
ShowMessage(Format('%p', [Pointer(stlResult)]));
Result := stlResult; //Result指向实例的地址
ShowMessage(Format('%p', [Pointer(Result)]));
stlResult.Free; //指向实例的地址虽然没有改变但实例已经释放
end;
王集鹄 2002-07-10
  • 打赏
  • 举报
回复
function aa: TStringList;
var
stlResult: TStringList;
begin
stlResult := TStringList.Create; //得到一个TStringList实例的地址
ShowMessage(Format('%p', [Pointer(stlResult)]));
Result := stlResult; //Result指向实例的地址
ShowMessage(Format('%p', [Pointer(Result)]));
stlResult.Free; //指向实例的地址虽然没有改变但实例已经释放
end;
manboo 2002-07-10
  • 打赏
  • 举报
回复
我认为可以这样处理的,如果有必要创建一个StringList的话不应该由函数创建,再外部创建,内部引用不好吗?何苦呢!
王集鹄 2002-07-10
  • 打赏
  • 举报
回复
var
Form1: TForm1;

//....
var
Form2: TForm1;
begin
Form2 := Form1;
Form2.Caption := 'Form2是一个对象的指针';
end;
王集鹄 2002-07-10
  • 打赏
  • 举报
回复
var
Form1: TForm1;

//....
var
Form2: TForm1;
begin
Form2 := Form1;
Form2.Caption := 'Form2是一个对象的指针';
end;
manboo 2002-07-10
  • 打赏
  • 举报
回复
我认为可以这样处理的,如果有必要创建一个StringList的话不应该由函数创建,再外部创建,内部引用不好吗?何苦呢!
王集鹄 2002-07-10
  • 打赏
  • 举报
回复
var
Form1: TForm1;

//....
var
Form2: TForm1;
begin
Form2 := Form1;
Form2.Caption := 'Form2是一个对象的指针';
end;
Nizvoo 2002-07-10
  • 打赏
  • 举报
回复
莫非一定得等到其拥有者Free时一齐Free吗?
zhxfzhxf1 2002-07-10
  • 打赏
  • 举报
回复
function aa: TStringList;
var
stlResult: TStringList;
begin
stlResult := TstringList.Create;
Result := stlResult;
stlResult.Free;
end;
进行资源申请与释放的工作应该在同一层次进行。这样的语句严重违反了这一规则。
可以用 zswang(伴水) 的方法。
把结果改为参数进行传递。
王集鹄 2002-07-10
  • 打赏
  • 举报
回复
一切都是数据 :)
一切变量都是指针 :)

//希望这个连接对你有所帮助//从新认识编程
http://www.csdn.net/Expert/TopicView1.asp?id=806954
backlove 2002-07-10
  • 打赏
  • 举报
回复
关注,我也挺困惑的
Nizvoo 2002-07-10
  • 打赏
  • 举报
回复
再接接,加分
ht99 2002-07-10
  • 打赏
  • 举报
回复
本来就不应该Free的。
加载更多回复(3)

5,388

社区成员

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

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