設定一個FLAG。new(p)時:Point_Flag := true; if (Point_Flag) then begin Dispose(p); Point_Flag := false; end;
没有,只能自己在释放指针后手动置为nil,然后再判断是否为nil
是呀,,,释放内存后,,要立即将指针置空: p:=nil;这是非常要紧的编程要求。
要么你用个try..except..把操作封起来(试试读这个指针,看看会AV不),但是很dirty
单纯的判断 p <> nil 是没意义的,也是不准确的。 它只是表示p 指针内容不是0。 至于这个p的内容是否有效,是没办法判断的。比如 var p:^integer; begin ... new(p); ... dispose(p); ... if (p<>nil) then // 这个判断没用 dispose(p); // 他还会被执行除非你写成 var p:^integer; begin ... new(p); ... dispose(p); p:= nil; // 增加他 ... if (p<>nil) then // 这个判断有用了 dispose(p);
if (Point_Flag) then begin
Dispose(p);
Point_Flag := false;
end;
它只是表示p 指针内容不是0。
至于这个p的内容是否有效,是没办法判断的。比如
var
p:^integer;
begin
...
new(p);
...
dispose(p);
...
if (p<>nil) then // 这个判断没用
dispose(p); // 他还会被执行除非你写成
var
p:^integer;
begin
...
new(p);
...
dispose(p);
p:= nil; // 增加他
...
if (p<>nil) then // 这个判断有用了
dispose(p);