【发布时间】:2017-03-10 03:56:54
【问题描述】:
我在理解指针的行为时遇到了一些麻烦。 我有一个非常简单的例子来演示:
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 3
37 - 44 bytes: Unknown x 1
85 - 92 bytes: TStringList x 1
现在,如果我打电话
myPSL^.Free;
在处理指针之前,没有任何报告。
我不明白为什么会这样。我知道调用 New() 会分配足够的内存(基于指针的类型)并且调用 Dispose() 会注意释放相同的内存,那我为什么要需要像“真实”对象一样释放指针吗?
谢谢!
【问题讨论】:
-
您最初遵循的哪个教程让您陷入了困境?
标签: delphi pointers memory-leaks