a:=Tstringlist.create;
b:=Tstringlist.create;
b:=a;
这样是不是b和a都指向同一内存区域?当b改变时,a也跟着改变,两者的值都是一样?
java中是这样的,DELPHI中是这样吗?
b:=Tstringlist.create;
b:=a;
这样是不是b和a都指向同一内存区域?当b改变时,a也跟着改变,两者的值都是一样?
java中是这样的,DELPHI中是这样吗?
解决方案 »
- 写了2个函数,大家帮看看效率有没有哪里可以提升的
- 宝贝儿子出生,散分!!!
- 新手提问:调用存储过程返回数据集的问题!!!
- [关于串口通信]小虾才学DELPHI,一个想了很久都没法解决的问题
- ClientSocket和ServerSocket的问题!
- delphi和mysql能连接吗?高手请进!!
- 一个ADO方面的问题
- 放假前还有一个问题,报表打印前,如何检查是否安装打印机?
- 谁可以把 MessageDlg(sStr, mtInformation, [mbYesToAll, mbYes, mbNo, mbCancel], 0) 修改为中文提示:
- 获取wan口IP
- 应该选用什么控件?
- 讨论DELPHI+SQLSERVER B/S 网络解决方案
a:=Tstringlist.create;
b:=Tstringlist.create;
b:=a;a 和 b都是变量,变量能够互相赋值吗? 怎能能 2:=1 !!!!!
虽然这样运行时不会出现明显的错误,其实已经发生了内存泄漏!
a,b:TStringList;
a:=TStringList.Create;
b:=a;
这样b,a,才是指向同一块内存。
a,b:TStringList;
a:=TStringList.Create;
b:=a;
这样子b和a就是指向了同一个地方。
a,b:TStringList;
a:=TStringList.Create;
b:=TStringList.Create;
b:=a;
这样子原来的b在内存分配的TStringList就丢失了。而指向了a。
a 和 b都是变量,变量能够互相赋值吗? 怎能能 2:=1 !!!!!
a和b都是指针,当然能互相赋值,只是b分配的内存失去应用造成内存泄漏而已。
b:=TStringList.Create;
b:=a;
是可以的
A和B本质是指针,但这样丢失了B的空间,B被创建了,但已不能访问了,找不到B的地址了,
就是所谓的内存泄漏
你可以用a.sssign(b)不就行了啊。
var a,b:TStringList;
begin
a:=TStringList.Create;
b:= TStringList.Create; try
a.Add('a');
a.Add('b');
a.Add('c');
b.Add('c');
// b:=a; 如果去掉注释就出现内存泄露
b.Assign(a);
ShowMessage(a.Text);
ShowMessage(b.Text);
finally
a.Free;
b.Free;
end;