关于指针分配内存的释放问题(48分)

  • 主题发起人 主题发起人 tswhq
  • 开始时间 开始时间
T

tswhq

Unregistered / Unconfirmed
GUEST, unregistred user!
P :^Buffers;
l :TList;
...
New(P);
l.add(P);
...
P:=l.Items;
//由于p指向的内存有可能已经被其他进程释放掉了,这时怎样判断呢?
If P<>Nil then Dispose(P);
我这样用不行
 
if assign(p)then dispose(p)
 
这个有点麻烦,C++ 中的 _CrtIsValidHeapPointer 可以判断,比较准确。
Delphi 中,可以用 API 函数 IsBadWritePtr、IsBadReadPtr 或 IsBadCodePtr 来判断,不过非常不准确。
 
无法判断
因为就算指针指向的内存空间被释放了,只要系统没有使用那块内存并往里写东西,那块内存是一直不变的,释放是不会清零的.
这些东西都得自己把握,最好遵循一个规则:谁申请谁释放
 
对,谁创建谁释放
 
出个馊主意:用Try Except end包起代码
 
p1:=new(p)
if p1 <> nil then
begin
p1.free ;
p1 ;= nil ;
end;
个人认为 free以后要把指针指向nil
 
呵呵,其实用new创建的东东我一直都是用的FreeAndNil,和楼上同理
 
IsBadWritePtr、IsBadReadPtr 或 IsBadCodePtr
或者用try..except
 
同意楼上几位说的,谁申请谁释放,这样程序流程也清楚
 
你自己都不知道是否已经释放了,你让计算机帮你处理,呵呵计算机不是神仙,
会被你气死的。
 
多人接受答案了。
 
后退
顶部