我有一个非常简单的例子来证明:
type PSL = ^TStringList;...var myPSL : PSL;...procedure TForm1.FormCreate(Sender: TObject);begin New(myPSL); myPSL^ := TStringList.Create; myPSL^.Add('String 1'); myPSL^.Add('String 2'); myPSL^.Add('String 3');end;...procedure TForm1.FormDestroy(Sender: TObject);begin dispose(myPSL);end;
29 - 36 bytes: UnicodeString x 337 - 44 bytes: UnkNown x 185 - 92 bytes: TStringList x 1
现在,如果我打电话
myPSL^.Free;
在处理指针之前,没有报告任何内容.
我不明白为什么会这样.我知道调用New()分配足够的内存(基于指针的类型)并调用dispose()负责释放相同的内存,那么为什么我需要释放指针,好像它是一个“真正的”对象?
谢谢!
解决方法 类对象已被指针引用.定义指向引用类型的指针毫无意义.只需直接使用该类型:var myPSL : TStringList;...procedure TForm1.FormCreate(Sender: TObject);begin myPSL := TStringList.Create; myPSL.Add('String 1'); myPSL.Add('String 2'); myPSL.Add('String 3');end;...procedure TForm1.FormDestroy(Sender: TObject);begin myPSL.Free;end;
您的代码实际执行的 *** 作如下:
新的(myPSL)和dispose(myPSL)只是分配/解除分配大小为(TStringList)字节的内存块,但实际上并不构造/破坏该内存中的TStringList对象.你需要调用myPSL:= TStringList.Create和myPSL.Free.
总结以上是内存溢出为你收集整理的Delphi内存泄漏,指向TStringList全部内容,希望文章能够帮你解决Delphi内存泄漏,指向TStringList所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)