Delphi内存泄漏,指向TStringList

Delphi内存泄漏,指向TStringList,第1张

概述我在理解指针的行为方面遇到了一些麻烦. 我有一个非常简单的例子来证明: type PSL = ^TStringList;...var myPSL : PSL;...procedure TForm1.FormCreate(Sender: TObject);begin New(myPSL); myPSL^ := TStringList.Create; myPSL^.Add 我在理解指针的行为方面遇到了一些麻烦.
我有一个非常简单的例子来证明:

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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1270834.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存