这样做会发生内存漏失吗 ( 积分: 100 )

  • 主题发起人 主题发起人 gwbasic
  • 开始时间 开始时间
G

gwbasic

Unregistered / Unconfirmed
GUEST, unregistred user!
这样做会发生内存漏失吗?

TTest = record
a : string;
end;
PTest = ^TTest;


var
P : PTest;
P2 : pointer;
begin
P := new(PTest);
p.a := 'abc';
p.a := p.a + '333';
P2 := p;
Dispose(P2);
 
这样做会发生内存漏失吗?

TTest = record
a : string;
end;
PTest = ^TTest;


var
P : PTest;
P2 : pointer;
begin
P := new(PTest);
p.a := 'abc';
p.a := p.a + '333';
P2 := p;
Dispose(P2);
 
这样应该不会出现memory leak,

一般为了防止出现野指针,在Dispose的时候,还让
p2 :=nil;
p :=nil
 
不会,delphi 在开辟内存空间时会同时记录开辟空间的大小,所以 delphi dispose p2 时可以找到 p 原始开辟空间的大小,进而合理的释放。
 
不会的,New 和 Dispose 会对自动内存管理进行处理的,
譬如:长字符串和动态数组

但是如果你用 GetMem FreeMem 就肯定会有内存泄漏了
 
这样做会发生内存漏失吗?

TTest = record
a : string;
end;
PTest = ^TTest;


var
P : PTest;
P2 : pointer;
begin
New(P);
p.a := 'abc';
p.a := p.a + '333';
P2 := p;
Dispose(P2)
// 注意是 P2, 不是 Dispose(P)


这样做会发生内存漏失


参见:
http://community.csdn.net/Expert/topic/4027/4027318.xml?temp=.4367792
 
后退
顶部