StrAlloc和Strdispose搭配使用会造成内存泄漏吗? ( 积分: 100 )

  • 主题发起人 主题发起人 wodesnake
  • 开始时间 开始时间
W

wodesnake

Unregistered / Unconfirmed
GUEST, unregistred user!
P&nbsp;:=&nbsp;StrAlloc(124);&nbsp;&nbsp;&nbsp;<br>strpcopy(P,'sdfdf');&nbsp;&nbsp;<br>StrDispose(p);<br>上面是一段简单的分配和释放的代码,对于字符串内存分配我一置是使用GetMem,AllocMem,<br>FreeMem,因为他们可以指定分配多少,具体释放多少空间。<br>对于StrDispose函数是怎么知道释放124个字节,而不是只释放以nil字符结尾所占用的内存空间,比如上面P实际只占用了6个字节?
 
看看这两个函数在Delphi&nbsp;2006的实现,答案很清楚<br><br>function&nbsp;StrAlloc(Size:&nbsp;Cardinal):&nbsp;PChar;<br>begin<br>&nbsp;&nbsp;Inc(Size,&nbsp;SizeOf(Cardinal));<br>&nbsp;&nbsp;GetMem(Result,&nbsp;Size);<br>&nbsp;&nbsp;Cardinal(Pointer(Result)^)&nbsp;:=&nbsp;Size;<br>&nbsp;&nbsp;Inc(Result,&nbsp;SizeOf(Cardinal));<br>end;<br><br>procedure&nbsp;StrDispose(Str:&nbsp;PChar);<br>begin<br>&nbsp;&nbsp;if&nbsp;Str&nbsp;&lt;&gt;&nbsp;nil&nbsp;then<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;Dec(Str,&nbsp;SizeOf(Cardinal));<br>&nbsp;&nbsp;&nbsp;&nbsp;FreeMem(Str,&nbsp;Cardinal(Pointer(Str)^));<br>&nbsp;&nbsp;end;<br>end;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部